![](/img/trans.png)
[英]Weird behavior with Constructor and Class. Application hangs `forever` on Constructor
[英]infile class. Constructor undefined
它不断告诉我,我的构造函数Pet是未定义的。 有任何想法吗?
在while循环之前,我曾尝试在我的主要方法中定义Pet,但这给了我同样的问题。
import java.util.*;
import java.io.*;
public class ReadPets
{
public static void main (String[] args)
{
ArrayList <Pet> petList = new ArrayList <Pet>();
Scanner inFile = null;
String name;
Pet p;
try
{
inFile = new Scanner
(new FileInputStream ("pets.txt"));
}
catch(FileNotFoundException e)
{
System.out.println("problem opening file.");
System.exit(0);
}
while (inFile.hasNextLine())
{
name = inFile.nextLine();
p = new Pet(name); // here is where my error is
petList.add(p);
}
inFile.close();
}
}
这是我的宠物课。
public class Pet
{
private String name;
private int age; //in years
private double weight; //in pounds
/**
This main is just a demonstration program.
*/
public static void main(String[] args)
{
Pet myDog = new Pet( );
myDog.set("Fido", 2, 5.5);
myDog.writeOutput( );
System.out.println("Changing name.");
myDog.set("Rex");
myDog.writeOutput( );
System.out.println("Changing weight.");
myDog.set(6.5);
myDog.writeOutput( );
System.out.println("Changing age.");
myDog.set(3);
myDog.writeOutput( );
}
public void writeOutput( )
{
System.out.println("Name: " + name);
System.out.println("Age: " + age + " years");
System.out.println("Weight: " + weight + " pounds");
}
public void set(String newName)
{
name = newName;
//age and weight are unchanged.
}
public void set(int newAge)
{
if (newAge <= 0)
{
System.out.println("Error: illegal age.");
System.exit(0);
}
else
age = newAge;
//name and weight are unchanged.
}
public void set(double newWeight)
{
if (newWeight <= 0)
{
System.out.println("Error: illegal weight.");
System.exit(0);
}
else
weight = newWeight;
//name and age are unchanged.
}
public void set(String newName, int newAge, double newWeight)
{
name = newName;
if ((newAge <= 0) || (newWeight <= 0))
{
System.out.println("Error: illegal age or weight.");
System.exit(0);
}
else
{
age = newAge;
weight = newWeight;
}
}
public String getName( )
{
return name;
}
public int getAge( )
{
return age;
}
public double getWeight( )
{
return weight;
}
}
您的Pet
类没有带String
的构造函数,这是您在此行尝试的内容
p = new Pet(name)
做一个或做与演示类似的操作,即做一个新的Pet
实例,然后在该实例上调用set("Name")
喜欢:
p = new Pet();
p.set(name);
我在Pet
类中没有看到任何构造函数,这意味着Java将为您提供默认的(无参数)构造函数。
这就是为什么以下语句可以的原因:
Pet myDog = new Pet( );
您有问题的语句使用的构造函数带有尚未定义的参数 。
您将需要创建这样的构造函数( Pet(String name) {...}
)或更改逻辑以使用默认的构造函数和set()
方法。
在定义任何构造函数时会被警告,Java将不再为您创建默认的构造函数,因此您需要自己做。
您需要在我们的Pet类中使用一个String编写一个参数化的构造函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.