簡體   English   中英

訪問列表時出現 IndexOutOfBoundsException

[英]IndexOutOfBoundsException while accessing List

我正在為一個班級做一個項目,我想我已經基本弄清楚了,但它不斷給我不同的異常錯誤,現在我很難過。

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

這是我迄今為止的代碼,目前在 getMaximum 方法中給我和 IndexOutOfBounds 異常。

任何幫助將非常感激。

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;
    }

}

好像你的清單是空的。 可以觸發異常的是以下語句:

int max = inList.get(0);

所以你的 inList 沒有第一個索引中的值,這意味着 inList 是空的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM