TransWikia.com

Принимать массив содержащий все типы одежды и выводить в консоль все типы мужской одежды

Stack Overflow на русском Asked by Maria2000 on December 25, 2020

Дана задача сделать метод который принимает массив с одежой и выводит информацию о мужской одежде в классе Studio (классы Tshirt, Pants и Tie). Пыталась сначала сжделать геттеры в методе Tie и как вариант сделать метод toString(), но не получается их вызвать в методе из класса Studio. Подскажите пожалуйста, как это можно сделать?

public interface MenClothing  {
public void menGo();
}
public abstract class Clothing {
    public Razmer sizeClothing;
           int priceClothing;
           String  colorClothing;
String name;

}

public enum Razmer {
    xxs(32), xs(34), s(36), m(38), l(40);
private int euroSize;
public int getEuroSize(){
    return euroSize;
}
Razmer(int euroSize){
    this.euroSize=euroSize;
}
    public String getDescription(String slovo){
       if (slovo=="xxs"){
return "detskii размер";
       }
       else
        return "Взрослый размер";
    }
}

public class Tshirt extends Clothing implements MenClothing{
    Tshirt(Razmer sizeClothing, int priceClothing, String  colorClothing){
    this.sizeClothing=sizeClothing;
    this.priceClothing=priceClothing;
    this.colorClothing=colorClothing;
    name="Tshirt";
}
    @Override
    public void menGo() {
        System.out.println("men odel thirt");
    }
}
public class Pents extends Clothing implements MenClothing {
    Pents(Razmer sizeClothing, int priceClothing, String  colorClothing){
        this.sizeClothing=sizeClothing;
        this.priceClothing=priceClothing;
        this.colorClothing=colorClothing;
name="Pents";
    }


 Pents(){
        name="Pents";
    }
    @Override
    public void menGo() {
        System.out.println("men odel pants");
    }
}

public class Tie extends Clothing implements MenClothing {
    Tie(Razmer sizeClothing, int priceClothing, String  colorClothing){
        this.sizeClothing=sizeClothing;
        this.priceClothing=priceClothing;
        this.colorClothing=colorClothing;
name="Tie";
    }
Tie(){name="Tie";}
    **public Razmer getSize(){
        return sizeClothing;
    }
    public int getPrice(){
        return priceClothing;
    }
    public String getColor(){
        return colorClothing;
    }**
   public Tie t;
    @Override
    public void menGo() {
        System.out.println("men odel tie");
    }
    @Override
    **public String toString()
    {
        return "clothing{" + "size" + sizeClothing+ ", price='" + priceClothing + ''' + ", color" + colorClothing + '}';**
    }
}


  **public class Studio extends Clothing    {
        public void  menGo2(Clothing[] clothing) {
        Tie test = new Tie();
       Pents pents=new Pents();
        System.out.println(test.name+pents.name);

    }

}**

public class Main {
    public static void main(String[] args) {
Clothing[] clothing=new Clothing[4];
clothing[0]=new Tshirt(Razmer.xxs, 1000, "orange");
        clothing[1]=new Pents(Razmer.xxs, 2000, "orange");
        clothing[2]=new Skirt(Razmer.xs, 1000, "orange");
        clothing[3]=new Tie(Razmer.m, 1000, "orange");
Studio st=new Studio();
int k=0;
  for(Clothing i:clothing){
            st.menGo2();
            k++;
        }
        }}

Заранее спасибо!

2 Answers

Не вызывайте instanceof. В большей части случаев это свидетельствует о кривой архитекутре. Задумайтесь сами: вы приводите созданный экземпляр класс к переменной типа интерфейса, а потом у этой переменной спрашиваете, что там у тебя лежит и кастуете обратно. Это , как минимум, нелогично. Вместо этого спроектируйте свои классы. Вы допустили ошибку при создании иерархии классов. У вас получилось, что мужская одежда не относится к одежде, потому как мужская одежда - отдельный интерфейс, а одежда - абстрактный класс. Измените иерархию классов и все станет проще без всяких instanceof и прочих костылей.

public abstract class Clothing {

    private final Razmer sizeClothing;
    private final int priceClothing;
    private final String colorClothing;
    private final String name;

    public Clothing(Razmer sizeClothing, int priceClothing, String colorClothing, String name) {
        this.sizeClothing = sizeClothing;
        this.priceClothing = priceClothing;
        this.colorClothing = colorClothing;
        this.name = name;
    }

    public Razmer getSizeClothing() {
        return sizeClothing;
    }

    public int getPriceClothing() {
        return priceClothing;
    }

    public String getColorClothing() {
        return colorClothing;
    }

    public String getName() {
        return name;
    }
    
    public abstract String go();

    @Override
    public String toString() {
        //переопределите данный метод по вашему усмотрению, чтобы получать корректный вывод в консоль
        return "Clothing{" + "sizeClothing=" + sizeClothing + ", priceClothing=" + priceClothing + ", colorClothing=" + colorClothing + ", name=" + name + '}';
    }
    
}

public abstract class MenClothing extends Clothing{

    public MenClothing(Razmer sizeClothing, int priceClothing, String colorClothing, String name) {
        super(sizeClothing, priceClothing, colorClothing, name);
    }

    @Override
    public String go(){
        return "men odel " + getName();
    }
    
}

public enum Razmer {
    
    XXS(32, "Детский размер"), 
    XS(34, "Взрослый размер"), 
    S(36, "Взрослый размер"), 
    M(38, "Взрослый размер"), 
    L(40, "Взрослый размер");
    
    private final int euroSize;
    
    private final String description;
    
    private Razmer(int euroSize, String description) {
        this.euroSize = euroSize;
        this.description = description;
    }

    public int getEuroSize() {
        return euroSize;
    }

    public String getDescription() {
        return description;
    }
    
}

public class Studio {

    public void menGo2(Clothing[] clothings) {        
        for (Clothing clothing : clothings) {
            //выбирайте метод , который вам нужен
            System.out.println(clothing);
            System.out.println(clothing.go());
        }        
    }
    
}

import static xxx.Razmer.*;

public class Main {

    public static void main(String[] args) {
        Clothing[] clothing = {
            new Tshirt(XXS, 1000, "orange"),
            new Pents(XXS, 2000, "orange"),
            new Skirt(XS, 1000, "orange"),
            new Tie(M, 1000, "orange")
        };
        
        new Studio().menGo2(clothing);
        
    }
    
}

public class Pents extends MenClothing {

    public Pents(Razmer sizeClothing, int priceClothing, String colorClothing) {
        super(sizeClothing, priceClothing, colorClothing, "Pents");
    }
    
}

public class Skirt extends MenClothing {

    public Skirt(Razmer sizeClothing, int priceClothing, String colorClothing) {
        super(sizeClothing, priceClothing, colorClothing, "Skirt");
    }

}

public class Tie extends MenClothing {

    public Tie(Razmer sizeClothing, int priceClothing, String colorClothing) {
        super(sizeClothing, priceClothing, colorClothing, "Tie");
    }
    
}

public class Tshirt extends MenClothing {

    public Tshirt(Razmer sizeClothing, int priceClothing, String colorClothing) {
        super(sizeClothing, priceClothing, colorClothing, "Tshirt");
    }
    
}

Correct answer by Дмитрий on December 25, 2020

Маша я бы сделал бы так: ТЗ "Принимать массив содержащий все типы одежды и выводить в консоль все типы мужской одежды"

 public class Studio extends Clothing    {
        public void  menGo2(Clothing[] clothing) {
        for(Clothing thing : clothing) //Проходим по всем элементам массивам
           if(thing instanceof  MenClothing) //Проверяем является ли экземпляр интерфейсом менклозес
              System.out.println(thing);    
    }}

Answered by Andrew Kachalin on December 25, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP