提问人:Lekh Raj Awasthi 提问时间:12/23/2021 最后编辑:Lekh Raj Awasthi 更新时间:12/23/2021 访问量:207
我正在做功课,我卡在一个问题上。我是java的新手。你可以帮我吗?[复制]
I am doing my homework and I stuck in one question. I am new to java. can you help me? [duplicate]
问:
问题是:
创建一个具有属性名称、年龄和性别的班级人员。创建一个 person 数组以保存 10 个人实例。显示存储在数组中 person 实例上的信息。
我不确定这个问题说了什么,但我试过了,错误是这样的:
线程“main”中的异常 java.lang.NullPointerException 在 instance.main(instance.java:29)
这是我的代码:
import java.util.Scanner;
class person{
String name= new String();
int age;
String gender= new String();
void setInfo(String Name, int Age, String Gender){
name= Name;
age=Age;
gender=Gender;
}
void showInfo(){
System.out.println(name+" "+ age+" "+gender);
}
}
public class instance {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
String name= new String();
int age;
String gender= new String();
person obj[]= new person[10];
System.out.println("Enter Name age and gender of 10 persons");
for(int i=0; i<obj.length; i++)
{
name=sc.nextLine();
age=sc.nextInt();
gender=sc.nextLine();
obj[i].setInfo(name, age, gender);
}
for(int i=0; i<obj.length; i++){
obj[i].showInfo();
}
}
}
答:
2赞
임정묵
12/23/2021
#1
您需要实例化数组中的类。
for (int i = 0; i < obj.length; i++) {
name = sc.nextLine();
age = sc.nextInt();
gender = sc.nextLine();
//see section below
obj[i] = new person();
obj[i].setInfo(name, age, gender);
}
评论
0赞
Lekh Raj Awasthi
12/23/2021
谢谢删除了错误,但它只接受 20 个输入,即姓名和年龄,而不是 30 个输入。为什么?我的输入Claire 25 母插孔,错误是:线程“main”java.util.InputMismatchException 中的异常
0赞
임정묵
12/23/2021
是否必须逐行输入输入值?我不太明白这个问题,但考虑到你提到了 30 个......我认为您可以按如下方式更改此部分。年龄 = sc.nextInt();-->age = Integer.parseInt(sc.nextLine());
1赞
Lekh Raj Awasthi
12/23/2021
成功了。我们的老师没有这么说,或者他没有到达那里。谢谢。
0赞
user16123931
12/23/2021
#2
static class person {
String name= new String();
int age;
String gender= new String();
// Constructor
person(String Name, int Age, String Gender) {
this.name = Name;
this.age = Age;
this.gender = Gender;
}
void setInfo(String Name, int Age, String Gender){
name= Name;
age=Age;
gender=Gender;
}
void showInfo(){
System.out.println(name+" "+ age+" "+gender);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String name = new String();
int age;
String gender = new String();
person[] obj = new person[10];
for (int i = 0; i < obj.length; i++) {
name = sc.next();
age = sc.nextInt();
gender = sc.next();
//Initialize a new person object and assign its values and the add it to the array.
person personObj = new person(name, age, gender); // This is where a constructor is used.
obj[i] = personObj;
}
for (int i = 0; i < obj.length; i++) {
obj[i].showInfo();
}
}
我已经尝试了您的代码并发现了问题所在。
问题在于,每当创建类对象时,都必须创建一个构造函数来更新该类中变量的任何值。如果在同一类中创建的类 和 将在方法中使用,则使该类为静态。main
使用 Scanner 读取输入时,您使用了导致 .所以,只需使用sc.nextLine();
InputMisMatchException
sc.next();
评论
0赞
Lekh Raj Awasthi
12/23/2021
谢谢,但没有任何变化 与之前的答案相同的错误。它忽视了对性别的投入。
0赞
12/23/2021
这个答案的更新是否清除了你的作业?:)
评论
person obj[]= new person[10];
创建一个包含 10 个元素的数组,这些元素可以保存实例,但这些元素初始化为 。因此为 null,您应该在调用person
null
obj[i]
obj[i] = new person();
obj[i].setInfo(name, age, gender);
new()
setInfo()
Person x = new Person(name, age, gender)