无限循环问题,比较java中的数组

时间:2012-01-05 05:47:24

标签: java while-loop infinite-loop

我正在尝试在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;
    }

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

干杯

5 个答案:

答案 0 :(得分:3)

您错过了{}声明周围的while,但这不是您将要遇到的唯一问题。

我假设result也是一个char数组,但我看不到你在代码中声明它的位置。如果它是一个char数组,那么你无法使用stringarray != result进行比较,因为它总是为false,导致另一个无限循环。

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

将您的while语句更改为:

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

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

答案 1 :(得分:1)

这就是那家伙!

while(stringarray != result)

        count++;   

我猜您错过了{........}

while()

答案 2 :(得分:1)

这就是你的无限循环:

while(stringarray != result)

    count++;

由于没有大括号,只有第一行的下一行被认为是循环的一部分,所以在这个while循环中没有任何事情发生,除了递增计数值。

需要它吗?就是这样

此致

答案 3 :(得分:0)

因为你在while语句之后缺少花括号来包含for循环。

答案 4 :(得分:0)

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

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

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

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

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