gpt4 book ai didi

java - 在 java 中传递数组时代码中的意外输出

转载 作者:行者123 更新时间:2023-12-02 06:58:54 25 4
gpt4 key购买 nike

我一直面临在 java 中传递数组的问题。代码是:

package input_output;

import static java.lang.System.out;
import java.util.Scanner;

public class InputOutput {
private static Scanner sc;
public static void main(String []args){
sc = new Scanner(System.in);
out.print("Enter the length of arrays :\t");
int n = sc.nextInt();
Employee[] emp = new Employee[n];
for(int i=0;i<n;i++){
out.print("\nEnter name and age of " + (i+1) + " employee :\t");
emp[i] = new Employee();
emp[i].setName(sc.nextLine());
sc.nextLine();
emp[i].setAge(sc.nextInt());
}

Operation operate = new Operation(emp,n);

operate.printOnScreen();

}
}

class Operation{
Employee []emp;
public Operation(Employee[] emp,int n){
this.emp=emp;
for(Employee e: this.emp)
e = new Employee();
}

public void printOnScreen() {
for(Employee e : emp){
e = new Employee();
out.println("Name:\t" + e.getName() + "\t\tAge:\t" + e.getAge() + "\n");
}
}
}

Employee 类是一个简单的 bean,包含年龄和姓名的 getter 和 setter 方法。

输出来了:

Name: null
Age:0

我的错误是什么?


现在我已经将构造函数更改为

public Operation(Employee[] emp, int n){
this.emp=emp;
}

并删除了行:

e = new Employee(); 

来自 PrintOnScreen()

输出是:

Name:
Age:21

最佳答案

您没有在以下代码中从数组输出数据:

public void printOnScreen() 
{
for(Employee e : emp)
{
e = new Employee(); // <<< THIS IS WRONG, AS e IS ALREADY SET BY LOOP!!
out.println("Name:\t" + e.getName() + "\t\tAge:\t" + e.getAge() + "\n");
}
}

此代码在循环的每次迭代中创建一个新的 e => 您不是从数组中输出条目,而是新创建的条目。代码应该是这样的

public void printOnScreen() 
{
for(Employee e : emp)
{
out.println("Name:\t" + e.getName() + "\t\tAge:\t" + e.getAge() + "\n");
}
}

此外,以下代码没有意义:

public Operation(Employee[] emp,int n){
this.emp=emp;
for(Employee e: this.emp)
e = new Employee();
}

为什么要遍历 this.emp 中的所有员工以创建无处存储的新 Employee 实例?此外,不使用 n 参数。此代码应为:

public Operation(Employee[] emp)
{
this.emp=emp;
}

关于java - 在 java 中传递数组时代码中的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25684334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com