无法在阵列中的对象中使用扫描仪输入不同的值

时间:2014-07-25 16:40:55

标签: java arrays class object arraylist

我需要能够从数组中同一对象的扫描仪输入不同的值...我的数组是:

public static ArrayList<Case> monArrayCase = new ArrayList<Case>();

1 个答案:

答案 0 :(得分:2)

List的不同元素中的值相同的一个典型原因是

Case case = new Case();

被调用一次。然后,使用

设置案例的字段
case.setLigne(x);
case.setColone(y);
case.setValeur(z);

重复

list.add( Case.case );

将添加条目,但它们都将引用相同的对象Case.case,其值取决于最后的setter调用。

看到Case.case是一个静态变量,这也很可能就是这种情况。

要修复,请重复调用构造函数,即使是静态对象Case.case。

while( ... ){ // there is another Case to do
   // read values for ligne, colone, valeur
   Case.case = new Case( ligne. colone, valeur );
   monArrayCase.add(Case.case1);
}

当然,Case.case可以替换为本地对象

   Case nextCase = new Case(...);

或者,使用您的代码(删除一些无用的并发症并截断长字符串):

public void fairePlacementTest2() {
    System.out.println("Bonjours,...");
    System.out.println("Veuillez...");
    Scanner scanner = new Scanner(System.in);
    int ligne = scanner.nextInt();
    System.out.println("");
    System.out.println("Veuillez...");
    int colone = scanner.nextInt();
    System.out.println("");
    System.out.println("Veuillez...");
    int valeur = scanner.nextInt();
    System.out.println("");

    monArrayCase.add(new Case( ligne, colone, valeur ) );
}

<强>后来

这是输入数据的完整解决方案:

public class Case {
    private int ligne;
    private int colone;
    private int valeur;
    public Case( int ligne, int colone, int valeur ){
        this.ligne = ligne;
        this.colone = colone;
        this.valeur = valeur;
    }
    public String toString(){
        return "(" + ligne + "," + colone + ")=" + valeur;
    }
}

import java.util.*;
public class Grid {
    private List<Case> cases = new ArrayList<>();

    public void placement(){
        System.out.println("Bonjours,...");
        System.out.println("Veuillez... terminez avec zero!");
        Scanner scanner = new Scanner(System.in);
        while( true ){
            int ligne = scanner.nextInt();
            if( ligne == 0 ) break;
            int colone = scanner.nextInt();
            int valeur = scanner.nextInt();
            cases.add(new Case( ligne, colone, valeur ) );
        }
    }

    public List<Case> getCases(){
        return cases;
    }

    public static void main( String[] args ){
        Grid g = new Grid();
        g.placement();
        for( Case c: g.getCases() ){
             System.out.println( c );
        }
    }
}