Java 在循环中分配变量而不是直接引用会导致不同的结果

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

所以在过去的两个小时里,我一直在试图弄明白为什么下面两种方法给出了不同的结果。这两种方法都采用整数数组,删除其中的任何连续重复项,并在删除的每个重复项的末尾添加“-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] && 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;i
curVal和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)
to
if(curVal==nextVal&&curVal!=-1)
应该对代码执行此技巧。。。