2016-10-17 8 views
0

Mein Code soll eine Reihe von Nummern vom Benutzer ohne Limit nehmen, bis der Benutzer eine negative Zahl eingibt, um abzubrechen. Es gibt dann die folgende Ausgabe: 1) Die niedrigste Nummer im Array 2) Die größte Nummer im Array 3) Der Durchschnitt aller Zahlen im Array. Wenn ein Negativ eingegeben wird, gibt es eine Ausnahme außerhalb der Grenzen.Java ArrayList - Fehler

import java.util.Scanner; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

public class largeSmallAverage { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    //Initialize array and variables 
    List<Integer> userNumbers = new ArrayList<Integer>(); 
    double sum, average; 
    sum = 0; 
    average = 0; 
    int i, j, counter; 
    i = 0; 
    j = 0; 
    counter = 0; 



    //Ask for input 
    System.out.println("Please enter a series of numbers that you would like the average of, enter a negative number to end input"); 

    Scanner scan = new Scanner(System.in); 

    //do while loop until a negative number is entered 

    do { 
     System.out.println("Please enter a number"); 
     i = scan.nextInt(); 
     userNumbers.add(i); 
     counter++; 

    } while (i >= 0); 

    // Sort Array 

    Collections.sort(userNumbers); 

    // Get Average 

    for (j = 0; j < counter; j++) 
     sum = sum + userNumbers.get(j); 

     average = sum/counter; 

    System.out.println("Minumum Number: " + userNumbers.get(0)); 
    System.out.println("Maximum Number: " + userNumbers.get(counter)); 
    System.out.println("Average: " + average); 

} 

}

Antwort

3

Das Problem ist nicht mit der minimalen Anzahl Teil.
Das Problem ist der Index des Zählers, den Sie verwendeten, wenn Sie das letzte Element der Liste abrufen.
Das letzte Element der Liste ist die Länge-1.

System.out.println("Maximum Number: " + userNumbers.get(counter-1)); 
0

Das Problem in Ihrem Code ist hier:

System.out.println("Maximum Number: " + userNumbers.get(counter)); 

Sie stattdessen die maximale Elementindex als Referenz sollte:

System.out.println("Maximum Number: " + userNumbers.get(counter - 1)); 

... als Java-Arrays und Sammlungen sind 0- indexiert (der erste Index beginnt bei 0). Wenn Sie den Wert für die Größe der Sammlung ermitteln, wird eine IndexOutOfBoundsException ausgelöst.