我正在做一个小项目,但我遇到了麻烦。它与创建类,构造函数等有关。对于类,所有数据字段都必须是私有的。我还必须有两个构造函数,一个是默认的,一个是参数化的。这是班级:
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;我的班级有什么问题我没有抓到吗?我测试了它,似乎工作正常。
而且我没有找到明确的答案,我很可能自己弄明白了。我只是不确定发生了什么,特别是在我看来,当我向构造函数传递正确的参数时,这会起作用。
答案 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
扫描仪以避免资源泄漏。
希望有所帮助。