Проблема с бесконечным циклом, сравнение массивов в Java - PullRequest
1 голос
/ 05 января 2012

Я пытаюсь написать действительно маленькую программу на Java, которая принимает строку в качестве входных данных и использует функцию, которая генерирует псевдослучайный chatacter и сравнивает их с каждым элементом строки, если они совпадают с символом записывается в массив результатов с тем же индексом, что и в строковом коде ниже,

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 ]

3 голосов
/ 05 января 2012

Вы пропускаете {} вокруг вашего while заявления, но это не единственная проблема, с которой вы столкнетесь.

Я предполагаю, что result тоже массив символов, но я не вижу, где вы объявили его в своем коде. Если это массив символов, вы не можете сравнить его, используя stringarray != result, так как он всегда будет ложным, вызывая еще один бесконечный цикл.

Вам необходимо использовать Arrays.equals(array1, array2); для сравнения массивов.

Измените выражение while на:

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

И вы избежите еще одного бесконечного цикла.

1 голос
/ 05 января 2012

Здесь лежит ваш бесконечный цикл:

while(stringarray != result)

    count++;

Поскольку без фигурных скобок предполагается, что только первая следующая строка является частью цикла, то в этом цикле while ничего не происходит, кроме увеличения значения счетчика.

Сделай все необходимое. Вот и все

Привет

1 голос
/ 05 января 2012

Это парень!

while(stringarray != result)

        count++;   

Полагаю, вы пропустили {........} за свои while()

0 голосов
/ 05 января 2012

Используйте петлю while с фигурными скобками и используйте метод equals следующим образом.

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

Метод Arrays.equals() определяет следующее.

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

Возвращает true, если два указанных массива Объектов равны друг другу. Два массива считаются равными, если оба массива содержат одинаковое количество элементов, и все соответствующие пары элементов в двух массивах равны. Два объекта e1 и e2 считаются равными if (e1==null ? e2==null : e1.equals(e2)). Другими словами, два массива равны, если они содержат одинаковые элементы в одинаковом порядке. Кроме того, две ссылки на массив считаются равными, если обе null.

0 голосов
/ 05 января 2012

Поскольку вы пропускаете фигурные скобки после оператора while для включения цикла for.

...