我正在做作业,我卡在了一个问题上。我是 java 的新手。你能帮助我吗?
I am doing my homework and I stuck in one question. I am new to java. can you help me?
问题是:
创建一个 class 具有属性名称、年龄和性别的人。创建一个人员数组以容纳 10 个人员实例。显示数组中person实例上存储的信息。
我不确定问题是什么,但我试过了,错误是这样的:
线程“主”中的异常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();
}
}
}
您需要在数组中实例化class。
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);
}
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();
}
}
我试过你的代码,发现了问题。
问题在于,无论何时创建 class 对象,都必须创建一个构造函数来更新该 class 中的任何变量值。如果您在同一个 class 中创建的 class 和将在 main
方法中使用,则将 class 设为静态。
在使用 Scanner 读取输入时,您使用了 sc.nextLine();
,这导致 InputMisMatchException
。所以,只需使用 sc.next();
问题是:
创建一个 class 具有属性名称、年龄和性别的人。创建一个人员数组以容纳 10 个人员实例。显示数组中person实例上存储的信息。
我不确定问题是什么,但我试过了,错误是这样的:
线程“主”中的异常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();
}
}
}
您需要在数组中实例化class。
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);
}
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();
}
}
我试过你的代码,发现了问题。
问题在于,无论何时创建 class 对象,都必须创建一个构造函数来更新该 class 中的任何变量值。如果您在同一个 class 中创建的 class 和将在 main
方法中使用,则将 class 设为静态。
在使用 Scanner 读取输入时,您使用了 sc.nextLine();
,这导致 InputMisMatchException
。所以,只需使用 sc.next();