我的对象数组只打印最后输入的值 java

My array of objects only printing last entered value java

大家好,我是 Java 编程新手。在这里,我试图用对象数组实现一个代码。问题是每当我尝试打印时。它只打印最后输入的值 10 次。

import java.util.*;

class Tax{
    int ssn,income;
    void Tax(){}

    void Tax(int s,int i){
         this.ssn=s;this.income=i;      
    }

    int getssn(){
        return ssn;
    }

    int getincome(){
        return income;
    }
}

public class Usetaxpayer{
     public static void main(String[] args){
         Tax[] y=new  Tax[10];
         int i,inc,s=100;
         Scanner in=new Scanner(System.in);Tax x=new Tax();
         for(i=0;i<10;i++)
         {
             inc=in.nextInt();y[i]=x;
             x.Tax(s,inc);
             s++;      
         }
         for(i=0;i<10;i++)
         {
              System.out.println("SSN"+y[i].getssn()
              +"income"+y[i].getincome()+"\n");
         }
     }
}

请帮帮我`

问题是您使用一个对象 10 次并一次又一次地替换值。这仅保留最后一个值。试试这个:

class Tax{

    int ssn,income;
    void Tax(){}

    void Tax(int s,int i){
        this.ssn=s;this.income=i;
    }

    int getssn(){
        return ssn;
    }

    int getincome(){
        return income;
    }
}

public class Main{
    public static void main(String[] args){
        Tax[] y=new  Tax[10];

        int i,inc,s=100;

        Scanner in=new Scanner(System.in);

        for(i=0;i<10;i++)
        {
            Tax x=new Tax();
            inc=in.nextInt();
            y[i]=x;
            x.Tax(s,inc);
            s++;
        }

        for(i=0;i<10;i++)
        {
            System.out.println("SSN "+y[i].getssn() +"income "+y[i].getincome()+"\n");
        }
    }
}

您错误地将 void 作为构造函数。此外,您需要在循环内创建实例。

演示:

import java.util.Scanner;

class Tax {
    int ssn, income;

    Tax(int s, int i) {
        this.ssn = s;
        this.income = i;
    }

    int getssn() {
        return ssn;
    }

    int getincome() {
        return income;
    }
}

public class Usetaxpayer {
    public static void main(String[] args) {
        final int SIZE = 2;
        Tax[] y = new Tax[SIZE];
        int i, inc = 0, s;
        Scanner in = new Scanner(System.in);
        for (i = 0; i < SIZE; i++) {
            System.out.print("Enter SSN: ");
            s = in.nextInt();
            System.out.print("Enter income: ");
            inc = in.nextInt();

            y[i] = new Tax(s, inc);
        }
        for (i = 0; i < SIZE; i++) {
            System.out.println("SSN: " + y[i].getssn() + ", income: " + y[i].getincome());
        }
    }
}

样本运行:

Enter SSN: 123
Enter income: 1000
Enter SSN: 234
Enter income: 2000
SSN: 123, income: 1000
SSN: 234, income: 2000

注意:我使用了一个大小为 2 的数组进行演示。根据您的要求更改 SIZE 的值。

你有两个错误:

  1. 声明构造函数时出错,这些构造函数是在没有类型的情况下声明的,如下面的代码所示:

public Tax(){}

public Tax(int s, int i){
 this.ssn=s;this.income=i;
}

根据您的需要,建造者可以是 public 或私人的。

  1. 目前通过你的循环并将对象 x 添加到数组中只是添加相同的内存实例,最好的添加方法如下。
  Scanner in=new Scanner(System.in);
             for(i=0;i<10;i++)
             {
                 inc= in.nextInt();
                 y[i]= new Tax(s,inc);
                 s++;     
             }

这样您就可以始终添加一个新的 Tax 实例。