2016-11-21 5 views
0

Я не уверен, почему я возвращаю false для первого тестового прогона, как показано в приложении тестовой таблицы. Это был один из моих заданий в прошлом семестре, и я никогда не выяснял, как его решить:/My assign was to:Почему я возвращаю неправильный результат?

Напишите определение метода, oddsMatchEvens, чьи два параметра представляют собой массивы целых чисел одинакового размера. Размер каждого массива - четное число. Метод возвращает true тогда и только тогда, когда четные индексы первого массива равны элементам с нечетным индексом второго, последовательно. То есть, если w - первый массив, а q - второй массив, w[0] равен q[1], а w[2] равно q[3] и так далее.

Тест стол

enter image description here

Мой код был:

public boolean oddsMatchEvens(int[] w, int[] q) { 
    int count = 0; 

    for (int i = 0; i < w.length; i++) { 
     if (w[i] == q[i + 1]) 
      count++; 

     if (count == (w.length - 1)) 
      return true;  
    } 
    return false; 
} 
+0

в какой-то момент ваш массив, д, будет вне пределов ваш для. цикл должен идти от 'i = 0; i Michael

+0

Нет, поскольку он использует i Kryptur

+0

Но он обращается к q при i + 1 – Michael

ответ

0
if (count == (w.length - 1)) 
    return true; 

Это неправильно, так как у вас есть только w.length/2 индексы, которые вы должны сравнить.

Вы должны просто вернуть false, если w [i]! = Q [i + 1].

И вы должны увеличить I на 2, а не 1.

0

Есть две проблемы с кодом: Во-первых, ясно, упомянутые два входных массива имеют одинаковую длину, и вы должны сравнить их даже индекс к нечетному индексу. Таким образом, краевой случай возникает, когда вы проверяете последний элемент первого массива с последним + 1 элементом второго массива (который не существует, поскольку массивы имеют равную длину. Во-вторых, вы должны проверить первый массив, даже если второй массив нечетный, так что прирост должен быть я + = 2, а не я ++ Правильный код с оптимизацией (если одна проверка не удалась вы можете выйти из цикла):.

public boolean oddsMatchEvens(int[] w, int[] q) { 
    for (int i = 0; i < w.length-1; i+=2) { 

     if (w[i] != q[i + 1]) 
      return false; 
     else 
      continue; 
    } 

    return true; 
} 
Смежные вопросы