2013-12-12 4 views
0

у меня есть этот код, чтобы получить наибольшее и наименьшее значение в массиве, а затем распечатать все значения в строках из семи:Как проверить, если INT имеет значение

int hochstes; 
int niedrig; 
     int q = 0; 
     for(int i = 1; i <= 49; i++){ 
      if(hochstes == null){ 
       hochstes = array[i]; 
       niedrig = hochstes; 
      } 
      if(array[i] > hochstes){ 
       hochstes = array[i]; 
      } 
      if(array[i] < niedrig){ 
       niedrig = array[i]; 
      } 

      q++; 
      if(q == 7){ 
       q = 0; 
       System.out.println(""); 
      }else{ 
       String a = (i < 10) ? " " + i : "" + i; 
       System.out.print(a + ": " + array[i] + " "); 
      } 

     } 

В строке 4 им пытаются проверьте, имеет ли значение hochstes значение, и если я не назначу ему первое («второе») значение массива! Конечно, он не будет работать, чтобы сравнить hochstes с null что я должен использовать вместо этого спасибо!

+6

«int» всегда имеет значение и никогда не является «нулевым». – rgettman

+0

Что я сказал? 'Конечно, он не будет работать, чтобы сравнить hochstes с нулем, что я должен использовать вместо этого спасибо! ' –

+1

в вашем случае инициализировать' hochstes' и 'niedrig' с первым элементом из массива –

ответ

6

Поскольку примитивные типы не могут быть null, вы должны смотреть на него по-другому.

Самое простое решение - просто назначить ему первое возможное значение вне цикла и продолжить цикл из второго значения.

т.д .:

int hochstes = array[0]; 

// Loop from 1 to higher 

Как Петр Lawrey правильно замечает: вы начинаете свой итерации на индекс 1. Индекс 1 не совпадает с первым индексом, имейте это в виду. Многие (если не все) структуры данных основаны на нулевом значении, что означает, что они начинаются с 0, а не 1. Вот почему вы видите, что я назначаю array[0], чтобы получить первое значение.

+0

Это работает, если есть первое значение или массив не пуст. –

+0

Да, подразумеваемое предположение здесь состоит в том, что присутствует хотя бы 1 значение. Проверка на это должна быть добавлена ​​в фактическую реализацию, чтобы избежать проблем. –

+3

OP, по-видимому, считает, что первым элементом является '[1]'! –

0

Типы значений не могут быть null в Java.

У вас должна быть отдельная переменная boolean, инициализированная до false. Когда вы назначаете значение hochstes, также установите значение boolean на true. Затем проверьте значение boolean, чтобы узнать, еще ли инициализировано значение.

Для этой конкретной цели, вы можете также инициализировать макс/мин переменных минимальных/максимальных возможных значений, соответственно:

int hochstes = int.MIN_VALUE; 
int niedrig = int.MAX_VALUE; 

Вы можете пропустить условными полностью.

+0

в коде' int i; 'i не имеет значения. он не равен 0 и не может работать. int будет присвоен только 0, если это экземпляр –

+0

@LoganMurphy Спасибо, отредактирован соответствующим образом; Я думал о другом языке. – TypeIA

2

Используйте класс

обертки сделать

Integer hochstes = null; 

и вы все еще можете сделать нормальные операции с hochstes как обычный INT (сравнивающим/установкой значений и т.д.)

4

Вы можете использовать значения дозорных , Для максимума используйте Integer.MIN_VALUE и для минимального использования Integer.MAX_VALUE.

int hochstes = Integer.MIN_VALUE; 
int niedrig = Integer.MAX_VALUE; 

for(int i : array) { 
    if(hochstes < i) hochstes = i; 
    if(niedrig > i) niedrig = i; 
} 

Использование Integer (s) намного дороже и может создать объект для каждого элемента массива.

1

Вы всегда должны инициализировать свои переменные. Один из способов решить эту проблему можно при помощи первый элемент в массиве как макс/мин элемент:

int hochstes = array[0]; 
int niedrig = array[0]; 

Другой способ заключается в его инициализации с минимальным (или максимальным) значением доступным для переменного:

int hochstes = Integer.MIN_VALUE; 
int niedrig = Integer.MAX_VALUE; 
Смежные вопросы