所以我想绘制一个带有障碍物和自由空间的场(数组串)。 "+"
是障碍物,自由空间只是""
。如果我们有一个可用空间,我希望它被"*"
取代。我将选择该等二维数组的一个特定元素,该元素等于""
,并且将被"1"
替换。
我的问题似乎没有,你可以忽略下面的2个代码。以下是摘要,如果不清楚,请阅读到最后:
为什么这些事情彼此不相同?
if(field[i][j]==field[5][1]){
System.out.print("1");
}
和
if(i==5 && j==1){
System.out.print("1");
}
第一个代码不起作用。这里的特定数组元素将是field[5][1]
,我希望将其替换为1
:
public class Test{
public static void main(String[] args){
String[][] field = {{"+" , "+" , "+" , "+" ,"+" , "+" , "+"},
{"+" , "+" , "+" , "+" ,"+" , "" , "+"},
{"+" , "+" , "+" , "+" ,"" , "" , "+"},
{"+" , "+" , "+" , "" ,"" , "+" , "+"},
{"+" , "" , "" , "" ,"+" , "+" , "+"},
{"+" , "" , "+" , "+" ,"+" , "+" , "+"},
{"+" , "+" , "+" , "+" ,"+" , "+" , "+"}};
int x = field.length;
for(int i=0; i<x; i++){
for(int j=0; j<field[i].length; j++){
System.out.print(field[i][j]);
if(field[i][j] != "+"){
if(field[i][j]==field[5][1]){
System.out.print("1");
}
else{
System.out.print("*");
}
}
}
System.out.println("");
}
}
}
Output:
+++++++
+++++1+
++++11+
+++11++
+111+++
+1+++++
+++++++
第二个代码按预期工作:
public class Test{
public static void main(String[] args){
String[][] field = {{"+" , "+" , "+" , "+" ,"+" , "+" , "+"},
{"+" , "+" , "+" , "+" ,"+" , "" , "+"},
{"+" , "+" , "+" , "+" ,"" , "" , "+"},
{"+" , "+" , "+" , "" ,"" , "+" , "+"},
{"+" , "" , "" , "" ,"+" , "+" , "+"},
{"+" , "" , "+" , "+" ,"+" , "+" , "+"},
{"+" , "+" , "+" , "+" ,"+" , "+" , "+"}};
int x = field.length;
for(int i=0; i<x; i++){
for(int j=0; j<field[i].length; j++){
System.out.print(field[i][j]);
if(field[i][j] != "+"){
if(i==5 && j==1){
System.out.print("1");
}
else{
System.out.print("*");
}
}
}
System.out.println("");
}
}
}
Output:
+++++++
+++++*+
++++**+
+++**++
+***+++
+1+++++
+++++++
答案 0 :(得分:2)
if(field[i][j]==field[5][1]){
System.out.print("1");
}
这将比较字段[5] [1]的值等于“”,并且每个具有值“”的字段打印数字“1”。此代码不检查字段位置,而是比较值。
答案 1 :(得分:2)
两者显然不同:
if(field[i][j]==field[5][1]){
如果field[i][j]
为""
,则为真 - 并且有许多数组元素与此相等。
if(i==5 && j==1){
如果i == 5
和j == 1
- 仅在1位置为真,则为真。
应该注意的是,第一种方法不是比较字符串的可靠方法:它只是因为构造代码当前行为的field
的方式。通常,您应该使用field[i][j].equals(field[5][1])
。请参阅How do I compare strings in Java。
答案 2 :(得分:1)
if (field[i][j] == field[5][1]) {
System.out.print("1");
}
检查当前字段的值是否等于field[5][1]
的值(在您的情况下为""
)。如您所见,第一个输出标记来自""
的每个field
1
。
if (i==5 && j==1) {
System.out.print("1");
}
检查当前位置是否为5,1。不考虑field
的值。
答案 3 :(得分:0)
如果(i == 5&amp;&amp; j == 1)仅适用于一个案例, if(field [i] [j] == field [5] [1])对于具有与field [5] [1]相同值的所有情况都为真。 ( “”)
如果您的问题是“为什么= =在两个不同的字符串之间工作?”
原因是编译器的优化,谁将为每个相同的字符串创建一个constante,所以当==比较两个字符串与不同(i,j)的引用时,它实际上是相同的String对象,所以它是真。