【问题标题】:Infinite loop issue, comparing arrays in java无限循环问题,比较java中的数组
【发布时间】:2012-01-05 05:47:24
【问题描述】:

我正在尝试用 Java 编写一个非常小的程序,该程序将字符串作为输入,并使用一个生成伪随机字符并将它们与字符串的每个元素进行比较的函数,如果它们相同,则字符得到写入结果数组的索引与它在下面的字符串代码中的索引相同,

public static char randomChar(){

    int diceroll = dice.nextInt(25);    

    return alphabet.charAt(diceroll);

}

public static int itterator(String input){
    char inputchar;
    //convert input string to array
    char[] stringarray = input.toCharArray();

    while(stringarray != result)

        count++;    

    //itterate each character
        for(int i = 0; i<input.length(); i++)
        {
            inputchar = input.charAt(i);
            if( randomChar() == inputchar )
            {
                result[i] = inputchar;
            }
        }


    return count;
    }

但是程序永远不会终止,这是因为我创建了一个无限循环还是有其他原因?任何帮助表示赞赏!

干杯

【问题讨论】:

  • 我认为你的无限循环在这里:while(stringarray != result) count++;
  • 你应该在调试器中运行它——我敢打赌问题会很快出现。

标签: java while-loop infinite-loop


【解决方案1】:

您在while 语句周围缺少{},但这不是您将遇到的唯一问题。

我假设result 也是一个字符数组,但我看不到您在代码中的哪个位置声明了它。如果是 char 数组,则不能使用 stringarray != result 进行比较,因为它总是为 false,从而导致另一个无限循环。

您需要使用Arrays.equals(array1, array2); 才能在数组之间进行比较。

将您的 while 语句更改为:

while(!Arrays.equals(stringarray, result)) {
  //code here
}

你会避免另一个无限循环。

【讨论】:

  • 谢谢!没有注意到大括号的愚蠢错误,是的,我意识到while循环比较数组的方式可能导致问题(我似乎记得听说java比较数组占用的内存而不是内容或东西)
【解决方案2】:

这家伙!

while(stringarray != result)

        count++;   

我猜你错过了{........} 你的while()

【讨论】:

    【解决方案3】:

    这是你的无限循环:

    while(stringarray != result)
    
        count++;
    

    由于没有大括号,只有第一下一行被认为是循环的一部分,所以在这个 while 循环中,除了增加计数值之外,你什么都没有发生。

    做必要的事吧。就是这样

    问候

    【讨论】:

    • 大括号并不是唯一的问题。当意图可能是逻辑相等时(类似于Arrays.equals),OP 还在测试引用相等性。否则,除非您在循环中的某个点将一个引用设置为等于另一个引用(此处不会发生),否则它仍将永远旋转。
    • @yshavit :这就是我刚才所说的,这个循环只会增加其他值,所以我不能从自己身上假设,搜索者打算在那个 while 循环中做什么,所以我说, “做必要的事。就是这样。”问候
    【解决方案4】:

    因为您在 while 语句后缺少花括号来封闭 for 循环。

    【讨论】:

      【解决方案5】:

      使用带有花括号的while循环和使用equals方法,如下所示。

      while(!Arrays.equals(stringarray, result))
      {
         //...
      }
      

      Arrays.equals() 方法定义如下。

      public static boolean equals(Object[] a, Object[] a2)
      

      如果两个指定的对象数组彼此相等,则返回true。如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对相等,则认为这两个数组相等。两个对象e1e2 被认为是相等的if (e1==null ? e2==null : e1.equals(e2))。换句话说,如果两个数组以相同的顺序包含相同的元素,则它们是相等的。此外,如果两个数组引用都是null,则认为两个数组引用相等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-10
        • 1970-01-01
        • 1970-01-01
        • 2021-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多