的toString(); java的

时间:2013-02-04 14:31:34

标签: java tostring

任何人都可以看到为什么我的toString()方法不起作用?它编译得很好,但是当我运行它时会出现运行时错误:

这是我的代码:

import java.util.*;

public class ExamMarks {

    // fields
    private String moduleName;
    private int moduleCode;
    private int year;
    private int[] numbers;

    // methods
    public static int highestMark(int[] numbers) {
        int highest = numbers[numbers.length - 1];
        int i = numbers[0];
        for (i = 0; i < numbers.length - 1; i++) {
            if (numbers[i] > numbers[i + 1]) {
                highest = numbers[i];
            }
        }
        return highest;
    }

    public static double averageMark(int[] numbers) {
        int sum = 0;
        double average = 0.000;
        for (int i = 0; i < numbers.length; i++) {
            sum = numbers[i] + sum;
            average = sum / numbers.length;
        }
        return average;
    }

    // Constructor
    public ExamMarks() {
        moduleName = "Object Oriented Programming";
        moduleCode = 5015;
        year = 2013;
    }

    // toString
    @Override
    public String toString() {
        String result = ("The title of this module is : " + moduleName
                + "The code number of this module is: " + moduleCode
                + "The year of the Exam is: " + year + "Array average = "
                + averageMark(numbers) + "Highest grade = " + highestMark(numbers));
        return result;
    }

    // Tester
    public static void main(String[] args) {
        ExamMarks grade = new ExamMarks();
        Scanner percentages = new Scanner(System.in);
        int[] numbers = new int[20];
        double x = averageMark(numbers);

        System.out.println("Please enter 20 marks");

        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = percentages.nextInt();

        }

        System.out.println(grade);
    }
}

这是我得到的错误

java.lang.NullPointerException at ExamMarks.averageMark(ExamMarks.java:26) 
    at ExamMarks.toString(ExamMarks.java:42) 
    at java.lang.String.valueOf(Unknown Source) 
    at java.io.PrintStream.println(Unknown Source) 
    at ExamMarks.main(ExamMarks.java:65) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:27‌​2)

6 个答案:

答案 0 :(得分:3)

NullPointerException在这里。 private int [] number;

您的实例中的数字为空。

当你调用grade.toString()时,方法调用

 public static double averageMark(int [] numbers){
    int sum = 0;  
    double average = 0.000;
    for (int i = 0; i < numbers.length; i++){   // !!!! numbers is null

答案 1 :(得分:0)

未设置“moduleName”,“moduleCode”和“year”字段。尝试在调用System.out.println(grade);

之前设置它们

答案 2 :(得分:0)

您需要使toString()功能适用于例外。

在最基本的级别,您可以在整个实现中添加trycatch,或者使函数averageMark(numbers)highestMark(numbers)处理空指针异常。

答案 3 :(得分:0)

您从未设置private int [] numbers;类的ExamMarks字段。

numbers方法中的

toString()属于ExamMarks类的实例,而numbers中的main(...)只是一个局部变量。

答案 4 :(得分:0)

你打电话给

averageMark(numbers);

直接。所以你用作参数的数字很好。

但是toString()方法也调用了这个方法,但是没有初始化的类字段'numbers'。

你必须使'数字'也是静态的,并为它设置一些值。

答案 5 :(得分:0)

在与+运算符连接之前,你应该检查你的成员是否是!= null。

如果你使用eclipse使用rightclick - &gt;来源 - &gt;生成toString()...它会在您的类中生成一个简单的toString方法,您只需要更改文本。

通常效果很好,而且很容易使用。