构造函数和用户输入有问题

时间:2017-10-26 03:53:47

标签: java arrays constructor user-input

我正在做一个小项目,但我遇到了麻烦。它与创建类,构造函数等有关。对于类,所有数据字段都必须是私有的。我还必须有两个构造函数,一个是默认的,一个是参数化的。这是班级:

public class PetInfo {

    private String petName = "na";
    private boolean petType = true;
    private String petBreed = "na";
    private double petAge = 0;
    private double petWeight = 0;
    private String ownerName = "na";

    public PetInfo(){}

    public PetInfo(String name, boolean type, String breed, double age, double weight, String owner){
        this.petName = name;
        this.petType = type;
        this.petBreed = breed;
        this.petAge = age;
        this.petWeight = weight;
        this.ownerName = owner;
    }

    public String getName (){
        return petName;
    }

    public void setName(String name){
        petName = name;
    }

    public boolean getType(){
        return petType;
    }

    public void setType(boolean type){
        petType = type;
    }

    public String getBreed(){
        return petBreed;
    }

    public void setBreed(String breed){
        petBreed = breed;
    }

    public double getAge(){
        return petAge;
    }

    public void setAge(double age){
        petAge = age;
    }

    public double getWeight(){
        return petWeight;
    }

    public void setWeight(double weight){
        petWeight = weight;
    }

    public String getOwner(){
        return ownerName;
    }

    public void setOwner(String owner){
        ownerName = owner;
    }
}

以下是我的主要功能:

import java.util.Scanner;
public class Pp1_C00019540 {

    public static void main(String[] args) {
        PetInfo[] info = new PetInfo[5];
        collectInfo(info);
    }
    public static void collectInfo(PetInfo[] info){
        Scanner input = new Scanner(System.in);
        for(int i = 0; i < info.length;i++){
            System.out.print("Enter pet name: "); 
        }
    }
}

所以它打印&#34;输入宠物名称:&#34;,但它不会让我输入一个名字。我试着这样做:

    info[i] = new PetInfo(input.nextLine());

但它告诉我&#34;构造函数PetInfo.PetInfo(String,boolean,String,double,double,String)不适用。实际和正式的论点长度不同。&#34;我的班级有什么问题我没有抓到吗?我测试了它,似乎工作正常。

而且我没有找到明确的答案,我很可能自己弄明白了。我只是不确定发生了什么,特别是在我看来,当我向构造函数传递正确的参数时,这会起作用。

2 个答案:

答案 0 :(得分:1)

当你使用扫描仪输入时,这很简单。它接受一个字符串中的输入,因为没有这样的构造函数将字符串作为参数,它会给你一个错误。

您需要从扫描仪获取相应数据类型的输入,将它们存储在变量中,然后调用构造函数。我想你要做的是在从扫描仪中取逗号分隔输入时调用构造函数,这是不可能的。

答案 1 :(得分:1)

基本上,您的代码试图调用PetInfo构造函数,该构造函数将单个字符串作为输入。但根据您拥有的代码,不存在这样的构造函数。你只需要PetInfo的大型多参数构造函数。在调用构造函数之前,需要多次调用扫描程序进行输入。请参阅以下代码:

private static void collectInfo(PetInfo[] info) {
    Scanner input = new Scanner(System.in);
    try {
        for (int i = 0; i < info.length; i++) {
            System.out.print("Enter pet name: ");
            String petName = input.nextLine();
            System.out.print("Enter pet type: ");
            boolean petType = input.nextBoolean();
            input.nextLine();
            System.out.print("Enter pet breed: ");
            String petBreed = input.nextLine();
            System.out.print("Enter pet age: ");
            double petAge = input.nextDouble();
            input.nextLine();
            System.out.print("Enter pet weight: ");
            double petWeight = input.nextDouble();
            input.nextLine();
            System.out.print("Enter pet owner: ");
            String petOwner = input.nextLine();
            info[i] = new PetInfo(petName, petType, petBreed, petAge, petWeight, petOwner);
        }
    }
    finally {
        input.close();
    }
}

希望上面的代码能够很好地说明我所谈论的内容。另外,在致电input.nextLine()nextBoolean()后,请勿忘记致电nextDouble()。最后,不要忘记关闭input扫描仪以避免资源泄漏。

希望有所帮助。