0

問題:

FractionClass オブジェクトの配列を作成した後、次のような txtfile を読み込んで、各 Fraction に分子と分母を与えようとします。

11 12

7 24

2 3

5 6

7 9
...

最初の数値は分子で、2 番目の数値は分母です。これを行うには、Scanner クラスを使用します。readFractions-methode の下で、NULLpointerexception が配置されている場所にコメントを配置しました。

メインファイル:

package labo2oef5;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class Labo2Oef5 {

private static Breuk [] fractionArray;
private static int amountOfLines;

    public static void main(String[] args) throws FileNotFoundException {
        lengteBestand(); // stel amountOfLines al in
        readFractions();
        System.out.println(fractionArray[4].getNumerator()+" / "+  fractionArray[4].getDenominator());`

    }

    public static void readFractions() throws FileNotFoundException{
        Scanner lezer = new Scanner(new File("breuken01.txt"));
        fractionArray = new Breuk[amountOfLines];
        for(int i=0; i<amountOfLines;i++){
            double numerator = (double) lezer.nextInt();
            double denominator = (double) lezer.nextInt();
            fractionArray[i].setNumerator(numerator); // HERE IT GOES WRONG, THE NULLPOINTEREXCEPTION IS HERE
            fractionArray[i].setDenominator(denominator);// THIS LINE SUFFERS AS WELL FROM THE NULLPOINTEREXCEPTION
            lezer.nextLine();
        }

    }

    public static int lengteBestand() throws FileNotFoundException{
        Scanner lezer = new Scanner(new File("breuken01.txt"));
        amountOfLines=0;
        while(lezer.hasNextLine()){
            amountOfLines++;
            lezer.nextLine();
        }
        return amountOfLines;
    }

}

Breuk (分数のオランダ語) クラス:

package labo2oef5;

public class Breuk {

    private double numerator, denominator;

    public Breuk() {
        numerator = 0;
        denominator = 1;
    }

    public Breuk(double numerator, double denominator) {
        this.numerator = numerator;
        this.denominator = denominator;
    }

    @Override
    public String toString() {
        String breuk = numerator + "/" + denominator;
        if (numerator == 0) {
            breuk = "0";
        }
        return breuk;
    }

    private static double grootsteGemeneDeler(double a, double b) {
        if (a < 0 || b < 0) {
            return grootsteGemeneDeler(Math.abs(a), Math.abs(b));
        }
        if (b == 0) {
            return a;
        }
        if (a < b) {
            return grootsteGemeneDeler(b, a);
        }
        if (a % b != 0) {
            return grootsteGemeneDeler(b, a % b);
        } else {
            return b;
        }
    }

    public String normaliseer() {

        double numerator2 = numerator / (grootsteGemeneDeler(numerator, denominator));
        double denominator2 = denominator / (grootsteGemeneDeler(numerator, denominator));
        return numerator2 + "/" + denominator2;
    }

    public double decimaleVorm() {
        double decim = (double) numerator / denominator;
        System.out.println(decim);
        return decim;
    }

    public boolean isGroterDan(Breuk br) {
        if (this.decimaleVorm() > br.decimaleVorm()) {
            return true;
        } else {
            return false;
        }
    }

    public void vermeerderBreuk(Breuk br) {
        this.numerator = this.numerator * br.denominator + this.denominator * br.numerator;
        this.denominator = this.denominator * br.denominator;
    }

    public void produkt(Breuk br, Breuk breu) {
        numerator = br.numerator * breu.numerator;
        denominator = br.denominator * breu.denominator;
    }

    public void setNumerator(double numerator) {
        this.numerator = numerator;
    }

    public void setDenominator(double denominator) {
        this.denominator = denominator;
    }

    public double getNumerator() {
        return numerator;
    }

    public double getDenominator(){
        return denominator;
    }
} 

どちらの答えも正しい答えです。答えの下にもこのコードを追加する必要がありました。}

4

2 に答える 2

4

fractionArray[i]はnullなので、スローしNullPointerExceptionます。私はあなたがそのようにするべきだと思います:

fractionArray[i] = new Breuk();
fractionArray[i].setNumerator(numerator);
fractionArray[i].setDenominator(denominator);
于 2013-10-05T17:28:19.030 に答える
3

これを試して:

public static void readFractions() throws FileNotFoundException{
    Scanner lezer = new Scanner(new File("breuken01.txt"));
    fractionArray = new Breuk[amountOfLines];
    for(int i=0; i<amountOfLines;i++){
        double numerator = (double) lezer.nextInt();
        double denominator = (double) lezer.nextInt();
        fractionArray[i] = new Breuk(numerator, denominator);
        // Creating an array of references leaves them all null until you point them to something non-null by calling new
        lezer.nextLine();
    }

}
于 2013-10-05T17:27:29.273 に答える