2014-01-08 2 views
-2

Хорошо, так что я не могу понять, почему, когда я входной массив 1, 2, 100, 3, 9, 22, 58
следующий код возвращает 100:
(это всего лишь фрагмент, это является частью более крупного блока кода)Поиск максимального числа?

double result = numbers[0]; 
for (int i = 0; i < numbers.length; i++) 
    if (numbers[i] > result) 
     result = numbers[i]; 
System.out.println("The max value is " + result); 

Но без фигурных скобках в случае, если она выводит список номеров ведущих до самого большого, начиная с первого, в этом случае: 12100:

double result = numbers[0]; 
for (int i = 0; i < numbers.length; i++) 
    if (numbers[i] > result) { 
     result = numbers[i]; 
     System.out.println("The max value is " + result); 
    } 

Спасибо за вашу помощь заранее, это сводит меня с ума, и это, наверное, очень глупо.

+4

1) все блоки должны быть заключены в фигурные скобки, все, даже с одной строкой. 2) научитесь правильно отступать. Твое плохое отступы и отсутствие фигурных скобок забивают вас (надеюсь). –

+1

Предлагаю вам выполнить код в отладчике, если вы не понимаете, что делает ваша программа. –

ответ

4

Во втором примере вы печатаете внутри оператора if, поэтому каждый раз, когда он выполняет итерацию по списку, он выводит результат. В первом примере это делается после if, потому что вы не используете фигурные скобки. Когда вы не делаете {} скобки после утверждения, предполагается, что в эту инструкцию включена только следующая строка.

Прежде чем продолжить кодирование, вы должны изучить хорошие методы кодирования. Это поможет вам избежать подобных ситуаций позже, когда ваш код намного сложнее. Кроме того, прохождение кода покажет вам, что именно происходит, поэтому вы также должны узнать, как использовать отладчик.

2

в

if (numbers[i] > result) 
     result = numbers[i]; 
System.out.println("The max value is " + result); 

if блок без скобок включает в себя только непосредственный следующую строку.

одинаковый для for блок.

Объяснение.

for не имеет брекетов, поэтому он просто перебирает следующий блок кода, который является блоком if.

if блок не имеет фигурные скобки либо, поэтому он будет перебирать непосредственной следующий блок/заявление, которое

result = numbers[i]; 

настолько эффективно, ваше System.out.println("The max value is " + result); заявление из обоих блоков в первом случае и, следовательно, выполняет только один раз.

0

В первом случае результат устанавливается на текущий номер (number[i]), если это число больше предыдущего значения result. Это приводит к обновлению результата до наибольшего значения, найденного до сих пор, если оно больше первого значения, установленного в нем (numbers[0]). Если вы печатаете это в конце цикла, вы, таким образом, печатаете наибольшее число, найденное в массиве (максимальное значение). Во втором случае вы всегда печатаете наибольшее число, найденное до сих пор в массиве, когда вы проходите через массив numbers - поэтому вы печатаете цифры в порядке возрастания.

0

В первом примере System.out.println выполняется только один раз, в конце блока. Во втором примере он выполняется каждый раз, когда встречается новое число с наивысшим номером.

Добавление брекеты в обоих примерах следует сделать различие ясно:

for (int i = 0; i < numbers.length; i++) { 
    if (numbers[i] > result) { 
     result = numbers[i]; 
    } 
} 
System.out.println("The max value is " + result); // only ever called once 

против

for (int i = 0; i < numbers.length; i++) { 
    if (numbers[i] > result) { 
     result = numbers[i]; 
     System.out.println("The max value is " + result); // called whenever numbers[i] > result 
    } 
} 
0

всякий раз, когда вы нашли большее количество, чем результат вы поменять его с результатом, а также распечатать его.

System.out.println ("Максимальное значение" + результат);

должен быть сразу после цикла for (за пределами фигурных скобок), поэтому, когда цикл будет превышен, будет распечатано только наибольшее число.

0
double result = numbers[0]; 
for (int i = 0; i < numbers.length; i++) 
{ 
    if (numbers[i] > result) //this will check each array members to find the max 
{ 
     result = numbers[i];//assign the array member if it is the largest 
} 
System.out.println("The max value is " + result); //print the max value of the array 
0

Читайте на java и его операторы потока управления.

Операторы if и for имеют предложение, которое является управляемым кодом. Это может быть один оператор или группа операторов, заключенных в фигурные скобки.

Прочитайте это: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html

0

Я бы рассмотреть, как код пошагово с отладчиком, как предложил BobbyD17.

Для затмения см. Это link.

Для netbeans.

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