2015-02-15 4 views
0

Я пытаюсь заполнить ArrayList объектами, которые содержат целые числа и преобразовать их в массив объектов, где оттуда я могу определить наивысшее целочисленное значение в моем массиве Объекты. Но по какой-то причине к тому времени, когда я достиг точки, где я могу сравнивать значения с eachother, я потерял половину своего массива ArrayList или Array of Objects.Я пытаюсь заполнить ArrayList объектами

import java.util.Scanner; 
import java.util.ArrayList; 
import java.util.Collections; 
public class Exercise11_04 
{ 
    public static void main(String [] args) 
    { 
     System.out.println("Enter a sequence of integers ending in 0: \n"); 
     Scanner input = new Scanner(System.in); 
     ArrayList<Integer> intList = new ArrayList<Integer>(); 

     while(input.nextInt() != 0) 
     { 
      intList.add(new Integer(input.nextInt())); 
     }//end filler loop 
     System.out.println(max(intList)); 
     arrayContents(intList); 
    } 

    public static Integer max(ArrayList<Integer> list) 
    { 
     int maxIntIndex = 0; 

     Integer[] integers = new Integer[list.size()]; 
     integers = list.toArray(integers); 
     for(int index = 0; index < integers.length; index++) 
     { 
      if(integers[index].getValue() >= integers[maxIntIndex].getValue() ) 
      { 
       maxIntIndex = index; 
      } 
     } 
     return integers[maxIntIndex]; 
    } 
    class Integer 
    { 
     private int integer; 

     Integer() {this(0);} 
     Integer(int integer) {this.integer = integer;} 
     public int getValue() {return this.integer;} 
     public String toString() 
     { 
      return "The max value is: " + getValue(); 
     }// 
}//end 

Я попытался проверить, чтобы увидеть значения массива с помощью этого метода

public static void arrayContents(ArrayList<Integer> list) 
{ 
    Integer[] integers = new Integer[list.size()]; 
    integers = list.toArray(integers); 
    for(int index = 0; index < integers.length; index++) 
    { 
     System.out.println("The index is: " + index + " .The value is: " + integers[index].getValue()); 
    } 
} 
+0

Вы пробовали использовать отладчик? – Jens

+0

- это ваш код, компилирующий доступ к нестационарному классу из статического метода? Неясно, что вы имеете в виду потерянной половиной моего списка или массива? – SMA

ответ

1

используется input.nextInt() дважды на одной итерации в первом цикле; один раз, чтобы проверить, если значение равно нулю, и один раз для добавления в список. Следовательно, половина значений сравнивается с 0, а другая половина добавляется в список.

Просто прочитал один раз:

int v; 
while ((v = input.nextInt) != 0) 
    intList.add(v); 
+0

Да, это сработало, спасибо – Phillip

+0

Но мне все равно пришлось добавить объект так, чтобы он был intList.add (new Integer (v)); – Phillip

+0

Если вы не используете очень старую версию Java (1.4 и старше), вам не нужно создавать «Integer» при добавлении 'int' в контейнер; Java сделает это за вас (это называется autoboxing). –

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