你能帮助我与我的任务,请IllegalStateException异常:扫描仪关闭,结束应用程序流
编写一个程序来测试下面定义的Person类。你的测试程序应该创建这个类的两个实例(每个实例测试一个不同的构造函数)并测试每个方法。您还需要说明尝试从客户端类访问私有数据成员时的错误(为了清楚起见,临时将私有修改器更改为public并再次测试)。有关示例输出,请参见下面的截图。
的屏幕截图显示为:
p1 name = Not Given Age = 0 Gender = U
p2 name = Jane Doe Age = 0 Gender = F
p1 name = John Doe Age = 25 Gender = M
和
PersonTester.jave:20: name has private access in Person
System.out.println("p2 name = " + p2.name + "Age = " + p2.age + "Gender = " + p2.gender);
PersonTester.jave:20: age has private access in Person
System.out.println("p2 name = " + p2.name + "Age = " + p2.age + "Gender = " + p2.gender);
PersonTester.jave:20: gender has private access in Person
System.out.println("p2 name = " + p2.name + "Age = " + p2.age + "Gender = " + p2.gender);
3 errors
这里是给
class Person {
// Data Members
private String name; // The name of this person
private int age; // The age of this person
private char gender; // The gender of this person
// Default constructor
public Person() {
name = "Not Given";
age = 0;
gender = 'U';
}
// Constructs a new Person with passed name, age, and gender parameters.
public Person(String personName, int personAge, char personGender) {
name = personName;
age = personAge;
gender = personGender;
}
// Returns the age of this person.
public int getAge() {
return age;
}
// Returns the gender of this person.
public char getGender() {
return gender;
}
// Returns the name of this person.
public String getName() {
return name;
}
// Sets the age of this person.
public void setAge(int personAge) {
age = personAge;
}
// Sets the gender of this person.
public void setGender(char personGender) {
gender = personGender;
}
// Sets the name of this person.
public void setName(String personName) {
name = personName;
}
} // end class
这里类是我做了什么
import java.util.Scanner;
public class Person_Tester {
static char gender;
public static void main(String [] args){
//Create Array
Person[] p1 = new Person[2];
Person[] p2 = new Person[1];
try(Scanner string_input = new Scanner(System.in);
Scanner int_input = new Scanner(System.in)) {
for (int i = 0; i < 3; i++) {
Person person1 = new Person();
Person person2 = new Person();
//Enter Details For Person1
System.out.println("P1 Name: ");
person1.setName(string_input.nextLine());
System.out.println("Age: ");
person1.setAge(string_input.nextInt());
System.out.println("Gender: ");
gender = string_input.next().charAt(0);
System.out.println();
//Enter Details For Person2
System.out.println("P2 Name: ");
person2.setName(string_input.nextLine());
System.out.println("Age: ");
person2.setAge(string_input.nextInt());
System.out.println("Gender: ");
gender = string_input.next().charAt(0);
System.out.println();
string_input.close();
int_input.close();
}
}//end for loop
}//end main method
}//end class
当我运行的代码,这是我所得到的
Name:
John Doe
Age:
22
Gender:
M
Name:
Age:
21
Gender:
F
Exception in thread "main" java.lang.IllegalStateException: Scanner closed
at java.util.Scanner.ensureOpen(Unknown Source)
at java.util.Scanner.findWithinHorizon(Unknown Source)
at java.util.Scanner.nextLine(Unknown Source)
at Person_Tester.main(Person_Tester.java:26)
Name:
我试着取出
string_input.close();
int_input.close();
,我得到
Name:
john doe
Age:
22
Gender:
m
Name:
Age:
21
Gender:
f
Name:
Age:
21
Gender:
f
Name:
Age:
23
Gender:
m
Name:
Age:
它保持运行,不会让我输入一个名字
你能帮我解决它的请求吗SE,我需要把它由下午1点
非常感谢,我得到它只运行了3次,意识到我犯了错误:)你不能告诉我如何使用2个构造函数可以,因为我无法弄清楚这个问题“创建两个类的实例(每个实例都是测试不同的构造函数)并测试每种方法“ – RifferRaffers 2014-11-05 11:27:49