2012-04-23 3 views
0

Я написал коды для следующего вопроса, но результат не так, как ожидалось. Я не знаю, что-то не так с моим кодом. Логика кажется прекрасной. Может ли кто-нибудь увидеть, если что-то не так с моим кодом.Логика относительно вычитания и сравнения элементов массива

Учитывая массив отсортированных в порядке возрастания, верните true, если массив содержит 3 смежных оценки, которые отличаются друг от друга не более чем на 2, например, с {3, 4, 5} или {3, 5, 5 }.

Мой исходный код выглядит следующим образом:

public boolean scoresClump(int[] scores) { 

    boolean result = false; 

    for(int i=0; i<scores.length-2; i++){ 
     if((scores[i+1]-scores[i])<=2 && (scores[i+2]-scores[i+1])<=2){ 
      result = true; 
      break; 
     } 
    } 

    return result; 
} 

This ссылка на этот вопрос.

+0

-scoresClump ({3, 4, 5}) → истинной -scoresClump ({3, 4, 6}) → ложно -scoresClump ({1, 3, 5, 5}) → истинная Это тестовые массивы –

+0

выход не как ожидалось значение .. ?? Я думаю, вам может понадобиться scores.length-2 .. –

+0

вы можете попробовать код на этом [ссылка] (http://codingbat.com/prob/p194530) –

ответ

2

Здесь вы идете. Ваш предыдущий пост не учитывал дельта между несмежными значениями.

public boolean scoresClump(int[] scores) { 
    boolean result = false; 

    for(int i=0; i<scores.length-2; i++){ 
     if((scores[i+2]-scores[i])<=2){ 
      result = true; 
      break; 
     } 
    } 

    return result; 
} 
+0

что вы подразумеваете под delta @johnb oh и ответ правильный –

+0

Максимальное различие между всеми значениями 3 должно быть <= 2. Это означает, что значение индекса x и значение индекса x + 2 могут отличаться только на 2. Если вы только проверяете 'x против x + 1' и' x + 1 на x + 2', вы не проверили разницу между 'x и x + 2' –

+0

, поэтому вопрос заключался в том, чтобы первый и последний номер триплетного номера не должны отличаться более чем на 2, а не каждый член, отличающийся друг от друга более чем на 2, когда вы идете слева направо правильно? –

0

Ваш for цикл должен быть for(int i=0; i<scores.length-2; i++){ иначе вы получите ArrayOutOfBoundsException.

Кроме того, ваш break должен быть в true условным, а не false. В настоящее время в вашем коде существует цикл после первого набора из 3 элементов, которые не соответствуют условию.

Кроме того, если они уже отсортированы в порядке возрастания нет необходимости делать Math.abs

+0

Я скорректировал код. По-прежнему нет смысла. Я прикрепил ссылку на вопрос сейчас. –

0

Во-первых, если вы получили сообщение об ошибке или неожиданное поведение, которое вы должны описать то, что он (например, ожидаемый и реальный объем производства).

В вашем случае я могу обнаружить хотя бы одну ошибку в вашем коде: вы получаете доступ к своим записям в цикле [i + 2]. Когда я дойду до длины 1, вы получите длину + 1. Даже доступ к длине + 0 уже является ошибкой, так как последний элемент имеет длину индекса-1. Вы не указали свой полный код, но я предполагаю, что из-за возникшего исключения результат в вызывающей функции интерпретируется как false.

Кроме того, две проверки не нужны, достаточно одной проверки, так как вы выполните следующую проверку со следующей итерацией.

+0

Это мой отредактированный код: \t общественного логический scoresClump (ИНТ [результаты]) { \t \t \t \t логический результат = ложь; \t \t для (int i = 0; i <оценки.Длина-2; я ++) { \t \t \t, если ((баллы [+ 1] -scores [I]) <= 2 && (баллы [I + 2] -scores [+ 1]) <= 2) { \t \t \t \t result = true; \t \t \t \t break; \t \t \t} \t \t} \t \t \t \t возвращаемого результата; \t} Он по-прежнему выводит true, где он должен быть ложным. Это тестовая ссылка [ссылка] (http://codingbat.com/prob/p194530) –

+0

Не публикуйте обновленный код в виде комментария или ссылки. Обновите вопрос. –

0

попробовать это:

public boolean scoresClump(int[] scores) { 
boolean result=false; 
for(int i=0; i<scores.length-2; i++){ 
     if(Math.abs(scores[i]-scores[i+1])<=2 && 
     Math.abs(scores[i+1]-scores[i+2])<=2 && 
     Math.abs(scores[i]-scores[i+2])<=2){ 
      result=true; 
     } 
} 
return result; 
} 
+0

не сработал, [попробуйте эту ссылку] (http://codingbat.com/prob/p194530) –

+0

Почему должен быть scoresClump ({3, 4, 6}) должен быть ложным? – Kshitij

+0

вот почему я озадачен. Я не знаю, повреждены ли тестовые вопросы с ответами. –

Смежные вопросы