【问题标题】:Create an instance of a class within another class with values passed in through user input使用通过用户输入传入的值在另一个类中创建一个类的实例
【发布时间】:2015-01-11 07:56:22
【问题描述】:

我有两个班级:AnimalShelter。 我有一个toString 方法,它应该打印出收容所的名称以及来自动物的所有信息,所有这些信息都是通过扫描仪类的用户输入收集的。但是,当我在 Shelter 类中创建 Animal 的实例时,该实例中显然还没有任何值。

问题:如何将通过用户输入收集的值指向庇护类,以便它可以使用toString()方法打印出shelterName

用户输入:

public class AnimalShelter {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        System.out.println("What is your animal's name?");
        String animalName = scan.nextLine();
        System.out.println("What is your animal's type?");
        String type = scan.nextLine();
        System.out.println("What is your animal's age?");
        int age = scan.nextInt();
        scan.nextLine();
        System.out.println("What is the name of your animal shelter?");
        String shelterName = scan.nextLine();
        Shelter myShelter = new Shelter(shelterName);
        System.out.println(shelterName.toString());

    }

}

动物类:

public class Animal {

private String animalName;
private String type;
private int age;

    public Animal(String animalName, String type, int age)
    {
        this.animalName = animalName;
        this.type = type;
        this.age = age;
    }

    public String getAnimalName()
    {
        return animalName;
    }

    public String getType()
    {
        return type;
    }

    public int getAge()
    {
        return age;
    }

}

Shelter 类:如何将用户输入的值指向myAnimal 对象

public class Shelter {

    Animal myAnimal = new Animal(); 

    private String shelterName;

    public Shelter(String shelterName)
    {
        this.shelterName = shelterName;
    }

    public String toString(Animal myAnimal)
    {
        myAnimal.getAnimalName();
        myAnimal.getType();
        myAnimal.getAge();
        return "" + shelterName + myAnimal.getAnimalName() + myAnimal.getType() + myAnimal.getAge();
    }

}

【问题讨论】:

    标签: java string class pointers return


    【解决方案1】:

    在您的示例代码中,您有一个从未使用过的动物类。我反对用勺子喂的答案,但我心情很好,所以我会逐行向你解释。

    public class AnimalShelter {
    
        public static void main(String[] args) {
    
            Scanner scan = new Scanner(System.in);
    
            //Save user input as temp variable values
            System.out.println("What is your animal's name?");
            String animalName = scan.nextLine();
            System.out.println("What is your animal's type?");
            String type = scan.nextLine();
            System.out.println("What is your animal's age?");
            int age = scan.nextInt();
             //Create an instance of your Animal class passing your temp variables
            Animal animal= new Animal(animalName,type,age);
            scan.nextLine();
            System.out.println("What is the name of your animal shelter?");
            String shelterName = scan.nextLine();
    
            //Create your Shelter class here passing the shelter name
            Shelter myShelter = new Shelter(shelterName);
    
            //Use the same class to pass your animal class(the one where you placed the attributes in) into the Shelter class.
            System.out.println(myShelter.toString(animal));
    
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      简短的回答是,您可能不想!

      在这里,您的 AnimalShelter 类似乎设置得很好,但它们实际上不需要像这样链接。

      请考虑在您的 main(...) 方法中创建 Animals,然后使用新方法将它们“添加”到现有避难所。

      例如:

      public class Shelter {
          // Animal myAnimal = new Animal(); Remove this
          private  String shelterName; // This is good.
          public Shelter(..) // This is fine too
      
          public String toString(...) // This works, perhaps?
          // New method here, with list
          private ArrayList<Animal> listOfAnimals_
          public void addAnimal(Animal newAnimal)
          {
              listOfAnimals_.add(newAnimal);
          }
      }
      

      然后来自main

      Animal TimTheCow = new Animal ("Tim", "Cow", 5);
      myShelter.addAnimal(TimTheCow);
      

      这消除了一些您不需要的强耦合,并减少了传递参数的压力。

      如果您想列出Shelter 的所有Animals,您可以将toString 方法更改为:

      public String toString()
      {
          String newStr;
          for ( Animal animal : listOfAnimals ) // apologies if bad syntax
          {
              newStr += animal.toString();
          }
          return "" + shelterName + newStr;
      }
      

      在你的 Animal 班级中,

      public String toString()
      {
          return "" + getAnimalName() + getType() + getAge();
      }
      

      【讨论】:

        【解决方案3】:

        将以下代码附加到 main() 方法的尾部:

        Animal animal = new Animal(animalName, type, age);
        System.out.println(myShelter.toString(animal));
        

        【讨论】:

          猜你喜欢
          • 2018-11-02
          • 2021-03-21
          • 1970-01-01
          • 2022-10-25
          • 2016-11-06
          • 2020-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多