キーボード(1つの値パラメータ)から読み取り方法またはファイル(0値パラメータ)から、0パラメーターで正常に動作しません

クレオン:

私は私のメソッドが追加され、その後、キーボードまたはファイルから三角形を読んで、したいArrayListポイントは2つの座標によって定義される:私は2つのクラスを持っている... int c1,int c2、とトライアングルクラスは、色文字列と3ポイントで定義されました。私は2つの方法、1つ持っているTriangleクラスと1つのPointクラス:

トライアングルクラスメソッド:

public Triangle readingTriangle(int value) throws Exception {
        if(value == 1) {
        Scanner sc = new Scanner(System.in);
        Triangle reserve =new Triangle();
        reserve.color = sc.next();
        reserve.setA(reserve.A.readingPoint(1));
        reserve.setB(reserve.B.readingPoint(1));
        reserve.setC(reserve.C.readingPoint(1));
        return reserve;
        }
        if(value == 0) {
            Scanner input = new Scanner(new File("File"));
            Triangle reserve1 =new Triangle();

            reserve1.color=input.next();
            reserve1.setA(reserve1.A.readingPoint(0));
            reserve1.setB(reserve1.B.readingPoint(0));
            reserve1.setC(reserve1.C.readingPoint(0));
            return reserve1;
        }
        return new Triangle();


    }

Pointクラスのメソッド:

public Point readingPoint(int value) throws Exception {
        if(value==1) {
        Scanner sc = new Scanner(System.in);
        Point reserve=new Point();
        reserve.c1 = sc.nextInt();
        reserve.c2 = sc.nextInt();
        return reserve;
        }
        if(value==0) {
            Point reserve1=new Point();
            Scanner input1 = new Scanner(new File("File"));

            input1.next();
            reserve1.c1=input1.nextInt();
            reserve1.c2=input1.nextInt();


            return reserve1;

        }
        return new Point();

    }

テストクラスで:

    Scanner sc = new Scanner(System.in);
    int triangleNumber = sc.nextInt();
    List<Triangle> triangleList = new ArrayList<Triangle>();

    for (int i = 0; i < triangleNumber; i++) {
        Triangle t = new Triangle();
        Triangle t1 = t.readingTriangle(0);
        triangleList.add(t1);

    }
    System.out.println(triangleList);

私の出力:

[Triangle [color=green, A=Point [c1=20, c2=20], B=Point [c1=20, c2=20], C=Point [c1=20, c2=20]]]

マイファイル:

green
20 20
40 40
60 60

まず、私は(パラメータが機能している1つの値)メソッドの最初の部分が動作していることを言及したいと思います、私は、ファイルからの読み込みに問題があります。あなたは出力から問題を見ることができます:「20 20」は、BとCのポイントのために与えられています。

私は尊重しようといういくつかのものを持っています:

  • 可能であれば私が尊敬し、メソッドの私の構造はなりたいです。

  • スキャナを使用すると、(私はそれは古い技術を知っている)は必須です。

  • それは本当のメモ帳だった場合、私はメモ帳で物事を変更するために滞在するとは思わないので、私は、私のファイルを変更する必要はありません。

その他の所見:

私は、私が(しばらくしてみました問題は、スキャナ方法であると思いますinput1.hasNext())。

バシル:

あなたは、同じインスタンスを使用する必要がありますScannerここでは、ループ内の各反復で新しいインスタンスを作成しているので、それぞれの時間は、それはファイルの先頭から開始します。だから私は、メインクラスの単一のインスタンスを作成して、メソッドのパラメータとして渡すことをお勧めします。

トライアングルクラスメソッド:

public Triangle readingTriangle(int value, Scanner sc,Scanner input) throws Exception {
    if(value == 1) {
    Triangle reserve =new Triangle();
    reserve.color = sc.next();
    reserve.setA(reserve.A.readingPoint(1,sc,input));
    reserve.setB(reserve.B.readingPoint(1,sc,input));
    reserve.setC(reserve.C.readingPoint(1,sc,input));
    return reserve;
    }
    if(value == 0) {
        Triangle reserve1 =new Triangle();

        reserve1.color=input.next();
        reserve1.setA(reserve1.A.readingPoint(0,sc,input));
        reserve1.setB(reserve1.B.readingPoint(0,sc,input));
        reserve1.setC(reserve1.C.readingPoint(0,sc,input));
        return reserve1;
    }
    return new Triangle();


}

Pointクラスのメソッド:

public Point readingPoint(int value, Scanner sc,Scanner input) throws Exception {
    if(value==1) {
    Point reserve=new Point();
    reserve.c1 = sc.nextInt();
    reserve.c2 = sc.nextInt();
    return reserve;
    }
    if(value==0) {
        Point reserve1=new Point();
        reserve1.c1=input.nextInt();
        reserve1.c2=input.nextInt();


        return reserve1;

    }
    return new Point();

}

テストクラスで:

Scanner sc = new Scanner(System.in); //the only time you create new instance of Scanner(System.in) -> for keybord input
Scanner input = new Scanner(new File("File"));//the only time you create new instance of Scanner(new File("File")) -> for file input

int triangleNumber = sc.nextInt();
List<Triangle> triangleList = new ArrayList<Triangle>();
for (int i = 0; i < triangleNumber; i++) {
    Triangle t = new Triangle();
    Triangle t1 = t.readingTriangle(0,sc,input);
    triangleList.add(t1);

}
System.out.println(triangleList);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=293045&siteId=1