我需要能够从数组中同一对象的扫描仪输入不同的值...我的数组是:
public static ArrayList<Case> monArrayCase = new ArrayList<Case>();
答案 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 );
}
}
}