2014-04-10 54 views
-1

我正在爲一個類的項目工作,我想我已經得到它主要想通了,但它不斷給我不同的異常錯誤,現在我很難過。IndexOutOfBoundsException當訪問列表

的說明可以在這裏找到:http://www.cse.ohio-state.edu/cse1223/currentsem/projects/CSE1223Project11.html

這裏是我迄今的代碼,目前給我和IndexOutOfBounds例外的getMaximum方法。

任何幫助將不勝感激。

import java.io.*; 
import java.util.*; 

public class Project11a { 

    public static void main(String[] args) throws FileNotFoundException { 
     Scanner keyboard = new Scanner(System.in); 
     System.out.print("Enter an input file name: "); 
     String fileName = keyboard.nextLine(); 
     Scanner in = new Scanner(new File(fileName)); 
     System.out.print("Enter an output file name: "); 
     String outFile = keyboard.nextLine(); 
     PrintWriter outputFile = new PrintWriter(outFile); 
     while (in.hasNextLine()) { 
      String name = in.nextLine(); 
      List<Integer> series = readNextSeries(in); 
      int mean = getAverage(series); 
      int median = getMedian(series); 
      int max = getMaximum(series); 
      int min = getMinimum(series); 
      outputFile.printf("%-22s%6d%n", name, mean, median, max, min); 
     } 
     in.close(); 
     outputFile.close(); 

    } 

    // Given a Scanner as input read in a list of integers one at a time until a 
    // negative 
    // value is read from the Scanner. Store these integers in an 
    // ArrayList<Integer> and 
    // return the ArrayList<Integer> to the calling program. 
    private static List<Integer> readNextSeries(Scanner inScanner) { 
     List<Integer> nextSeries = new ArrayList<Integer>(); 
     while (inScanner.hasNextInt()) { 
      int currentLine = inScanner.nextInt(); 
      if (currentLine != -1) { 
       nextSeries.add(currentLine); 
      } else { 
       break; 
      } 
     } 
     return nextSeries; 
    } 

    // Given a List<Integer> of integers, compute the median of the list and 
    // return it to 
    // the calling program. 
    private static int getMedian(List<Integer> inList) { 
     Collections.sort(inList); 
     int middle = inList.size()/2; 
     int median = -1; 
     if (inList.size() % 2 == 1) { 
      median = inList.get(middle); 
     } else { 
      try { 
       median = (inList.get(middle - 1) + inList.get(middle))/2; 
      } catch (Exception e) { 

      } 
     } 
     return median; 
    } 

    // Given a List<Integer> of integers, compute the average of the list and 
    // return it to 
    // the calling program. 
    private static int getAverage(List<Integer> inList) { 
     int average = 0; 
     if (inList.size() == 0) { 
      return 0; 
     } 
     for (int i = 0; i < inList.size(); i++) { 
      average += inList.get(i); 
     } 
     return (average/inList.size()); 
    } 

    // Given a List<Integer> of integers, compute the maximum of the list and 
    // return it to 
    // the calling program. 
    private static int getMaximum(List<Integer> inList) { 
     int max = inList.get(0); 
     for (int i = 1; i < inList.size(); i++) { 
      if (inList.get(i) > max) { 
       max = inList.get(i); 
      } 
     } 
     return max; 
    } 

    // Given a List<Integer> of integers, compute the maximum of the list and 
    // return it to 
    // the calling program. 
    private static int getMinimum(List<Integer> inList) { 
     int min = inList.get(0); 
     for (int i = 1; i < inList.size(); i++) { 
      if (inList.get(i) < min) { 
       min = inList.get(i); 
      } 
     } 
     return min; 
    } 

} 
+2

通過讀取異常的堆棧跟蹤開始。它告訴你什麼和問題在哪裏,集合的大小是什麼,以及不正確的索引是什麼。 –

回答

0

好像你的列表是空的。 什麼可以觸發例外是聲明:

int max = inList.get(0); 

所以你INLIST沒有在第一索引,這意味着INLIST爲空值。