2015-11-04 108 views
-1

目前,我正在处理数组。 我有一个数组完整的数字,我想用一个字母替换一个(取决于用户输入)。 我第一次有一个错误,我不能将int转换为字符串,所以我决定把所有东西都放入字符串中,尽管我不知道它是否有效。由于我不明白的原因,值的替换永远不会发生。防爆;说我输入1,数组保持不变?谁能帮忙?谢谢。如何正确替换数组中的值?

String[][] numbers = new String[3][3]; 



for (int i = 0; i<3 ; i++) 
{ 
    for (int j = 0; j<3 ; j++) 
    numbers[i][j] = String.valueOf(3*(i)+j+1); 

} 
System.out.println(Arrays.deepToString(numbers).replaceAll("],", "]\n").replaceAll(",", "")); 


System.out.println("Enter a valid value:"); 
int value = keyb.nextInt(); 

for (int i = 0; i<3; i++) 
{ 
    for (int j = 0 ; j<3 ; j++) 
    { 
     if (numbers[i][j] == String.valueOf(value)) 
     { 
      numbers[i][j] = "X"; 

     } 
    } 
} 
System.out.println(Arrays.deepToString(numbers)); 
+0

在if(numbers [i] [j] == String.valueOf(value))行上放置一个断点,看看你在比较什么。 – Stefan

+0

哦哇,我现在问这个问题我感到很傻。非常感谢安东尼。 –

回答

1

安东尼格里斯特提到,字符串比较是根本原因:

for (int i = 0; i<3; i++) 
{ 
    for (int j = 0 ; j<3 ; j++) 
    { 
     if (numbers[i][j] == String.valueOf(value)) 
     { 
      numbers[i][j] = "X"; 

     } 
    } 
} 

你不能(可靠)与==比较字符串,使用.equals代替:

final String numAsString = String.valueOf(value); 
for (int i = 0; i<3; i++) 
{ 
    for (int j = 0 ; j<3 ; j++) 
    { 
     if (numbers[i][j].equals(numAsString)) 
     { 
      numbers[i][j] = "X"; 

     } 
    } 
} 

编辑:移动String.valueOf调出for循环,以便仅评估一次。

+1

为了提高性能,你需要在循环外执行'String.valueOf()'。 – Andreas

+0

@Andreas,我同意。如果性能成为问题,我将把它留给OP来发布另一个问题。 – Andreas

+0

当我同意我自己的时候总是很好。大声笑。除了开玩笑,它只跑了9次,所以这里不是一个真正的问题,但养成正确的习惯,当它确实很重要时,它就成为第二性质。 – Andreas