1
import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class ReadCellPhones {
    public static void main(String Args[]) throws IOException {
        Scanner s = new Scanner(System.in);
        File Input = new File("Cellphone.txt");
        Scanner f = new Scanner(Input);

        String[] Cells = new String[20];
        Double[] Amounts = new Double[20];

        Double threshold = printmenu();
        int number = 0;

        while (f.hasNext()) {
            Cells[number] = f.next();
            Amounts[number] = f.nextDouble();
            number++;
        }

        System.out.println("NUMBER\tArmount");

        for (int i = 0; i < Amounts.length; i++) {
            if (Amounts[i] > threshold)// THIS IS WHERE THE NULLPOINTER
            // EXCEPTION OCCURS
            {
                System.out.print(Cells[i] + "\t" + Amounts[i]);
            }
        }
    }

    static Double printmenu() {
        Scanner s = new Scanner(System.in);

        System.out.print("Enter the filename: ");
        String Filename = s.nextLine();

        System.out.print("Cell Bill Threshold: ");
        Double threshold = s.nextDouble();

        return threshold;
    }
}

所以我要做的是从文件中读取数据,将数据存储在 2 个数组中,如果 Amounts 数组值大于为阈值变量输入的值,则打印出数组。但是当我尝试运行程序时,会弹出空指针错误,知道为什么吗?

4

3 回答 3

2

问题是您读入的记录少于 20 条。

数组中的每个 DoubleAmounts默认值为 null。Amounts[i]当 java 为与 比较而进行拆箱时threshold,它会尝试取消引用此 null 值,从而创建异常。

解决方案是标记有多少值被成功读入,并且只将这些值与阈值进行比较。

于 2012-12-04T01:02:15.843 回答
0

如果阈值小于 20,您的 for 循环将继续到 Amounts 数组的末尾,其中将包括未初始化的双精度数。根据您想要的功能,我建议循环直到我

于 2012-12-04T01:01:06.443 回答
0

不能保证文件数据的数量为 20。

所以改变你的循环限制计数器

//for(int i=0;i<Amounts.length;i++)
for(int i=0;i<number;i++)  //variable number has a count of file's data

祝你好运

于 2012-12-04T01:11:55.073 回答