Java 在循环中分配变量而不是直接引用会导致不同的结果
所以在过去的两个小时里,我一直在试图弄明白为什么下面两种方法给出了不同的结果。这两种方法都采用整数数组,删除其中的任何连续重复项,并在删除的每个重复项的末尾添加“-1” 方法1给出正确的输出,而方法2变成无限循环Java 在循环中分配变量而不是直接引用会导致不同的结果,java,arrays,loops,Java,Arrays,Loops,所以在过去的两个小时里,我一直在试图弄明白为什么下面两种方法给出了不同的结果。这两种方法都采用整数数组,删除其中的任何连续重复项,并在删除的每个重复项的末尾添加“-1” 方法1给出正确的输出,而方法2变成无限循环 //Method 1 private static void smoosh1(int[] ints) { for (int i=0; i<ints.length-1; i++) { while (ints[i] == ints[i+1] &&am
//Method 1
private static void smoosh1(int[] ints) {
for (int i=0; i<ints.length-1; i++) {
while (ints[i] == ints[i+1] && ints[i] != -1) {
for (int x=i; x<ints.length-1; x++) {
ints[x] = ints[x+1]; }
ints[ints.length-1] = -1;
}
}
}
//Method 2
public static void smoosh(int[] ints) {
for (int i = 0; i < ints.length - 1; i++) {
int curVal=ints[i];
int nextVal=ints[i+1];
while (curVal == nextVal && curVal !=-1) {
for (int x = i; x < ints.length-1; x++) {
ints[x] = ints[x + 1];
}
ints[ints.length-1] = -1;
}
}
//方法1
私有静态void smoosh1(int[]int){
对于(int i=0;i为了使第二个代码段的行为与第一个代码段的行为相同,while
循环必须在每次迭代中修改curVal
和nextVal
的值:
public static void smoosh(int[] ints) {
for (int i = 0; i < ints.length - 1; i++) {
int curVal=ints[i];
int nextVal=ints[i+1];
while (curVal == nextVal && curVal !=-1) {
for (int x = i; x < ints.length-1; x++) {
ints[x] = ints[x + 1];
}
ints[ints.length-1] = -1;
curVal=ints[i];
nextVal=ints[i+1];
}
}
}
publicstaticvoidsmoosh(int[]int){
for(inti=0;i
否则表达式curVal==nextVal&&curVal!=-1
的值始终保持不变,while循环要么从不执行,要么从不终止。为了使第二个代码段的行为与第一个代码段的行为相同,while
循环必须修改curVal
和nextVal的值de>在每次迭代中:
public static void smoosh(int[] ints) {
for (int i = 0; i < ints.length - 1; i++) {
int curVal=ints[i];
int nextVal=ints[i+1];
while (curVal == nextVal && curVal !=-1) {
for (int x = i; x < ints.length-1; x++) {
ints[x] = ints[x + 1];
}
ints[ints.length-1] = -1;
curVal=ints[i];
nextVal=ints[i+1];
}
}
}
publicstaticvoidsmoosh(int[]int){
for(inti=0;i
否则,表达式curVal==nextVal&&curVal!=-1的值始终保持不变,while循环要么从不执行,要么从不终止。在while循环中得到的一个(在数组中找到的连续重复项)将永远不会退出,因为curVal和nextVal永远不会更改。
我建议您编写如下调试行:
//Method 2
public static void smoosh(int[] ints) {
for (int i = 0; i < ints.length - 1; i++) {
int curVal=ints[i];
int nextVal=ints[i+1];
while (curVal == nextVal && curVal !=-1) {
System.out.println(curVal + " "+ nextVal);
for (int x = i; x < ints.length-1; x++) {
ints[x] = ints[x + 1];
}
ints[ints.length-1] = -1;
}
}
//方法2
公共静态无效smoosh(int[]int){
for(inti=0;i
当你在while循环中得到一个(在数组中找到连续的重复项)你将永远不会出来,因为curVal和nextVal永远不会改变。
我建议您编写如下调试行:
//Method 2
public static void smoosh(int[] ints) {
for (int i = 0; i < ints.length - 1; i++) {
int curVal=ints[i];
int nextVal=ints[i+1];
while (curVal == nextVal && curVal !=-1) {
System.out.println(curVal + " "+ nextVal);
for (int x = i; x < ints.length-1; x++) {
ints[x] = ints[x + 1];
}
ints[ints.length-1] = -1;
}
}
//方法2
公共静态无效smoosh(int[]int){
for(inti=0;icurVal和nextVal从不在while循环中更改,因此curVal==nextVal&&curVal!=-1的输出总是相同的。在您的情况下true
。实际上,您可能需要if
而不是while
,因此将while(curVal==nextVal&&curVal!=-1)
更改为if(curVal==nextVal&&curVal!=-1)
应该为代码做好准备…curVal和nextVal在while循环中从不更改,因此curVal==nextVal&&curVal!=-1的输出总是相同的。在您的情况下true
。实际上,您可能需要一个if
而不是while
,因此在while中更改(curVal==nextVal&&curVal!=-1)
toif(curVal==nextVal&&curVal!=-1)
应该对代码执行此技巧。。。