我正在做一个小项目,但我遇到了麻烦。它与创建类、构造函数等有关。对于类,所有数据字段都必须是私有的。我还必须有两个构造函数,一个默认构造函数和一个参数化构造函数。这是类:
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: ");
}
}
}
所以它打印"输入宠物名称:",但它不允许我输入名称。我尝试做:
info[i] = new PetInfo(input.nextLine());
但它告诉我"构造函数PetInfo.PetInfo(String,boolean,String,double,double,String)不适用。实际论点和正式论点的长度不同。我的班级有什么问题我没有抓住吗?我测试了它,它似乎工作正常。
而且我不是在寻找一个明确的答案,我很可能自己弄清楚。我只是不确定发生了什么,尤其是当我向构造函数传递正确的参数时,在我看来这应该起作用。
基本上,您的代码正在尝试调用将单个字符串作为输入的 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();
}
}
希望上面的代码能很好地说明我在说什么。另外,不要忘记在致电nextBoolean()
和nextDouble()
后打电话给input.nextLine()
。最后,不要忘记关闭input
扫描程序以避免资源泄漏。
希望有帮助。
嗯,当你使用扫描仪输入时,这很简单。它接受字符串中的输入,因为没有这样的构造函数将字符串作为参数,它会给您一个错误。
您需要从相应的数据类型中获取扫描器的输入,将它们存储在变量中,然后调用构造函数。我认为您要做的是在从扫描仪获取逗号分隔输入的同时调用构造函数,这是不可能的。