0

Web で見つけた本から Java の勉強を始めました。私は多くの演習を解決しましたが、私はこれでスタックしています。私の問題は、「x」を読み取った場合に次の整数を に追加することをプログラムに伝える方法についての答えが見つからなかったことですsumx。「y」を読み取った場合、次の整数を に追加しますsumy。以下は問題と私のコードです。

テキスト ファイルが次のようになっているとします。

x= 10
y= -45
y= 98
x= 13
x= 37
y= 36
x= -2

. . .

各行は "x=" または "y=" で始まりますが、どちらで始まるかはパターンに従いません。これらのそれぞれの後にスペースが続き、その後に 1 つの整数が続きます。行の整数の後には他に何もありません。

このデータ ファイルを読み取り、x 値の合計と y 値の合計を計算するプログラムを作成します。ヒント: hasNext() と next() を使用して "x=" と "y=" トークンを読み取り、次に nextInt() を使用して整数を読み取ります。String の equals() メソッドも必要です。

import java.util.Scanner;
import java.io.*;
class Separatesums {
    public static void main(String[] args) throws IOException {
        int sumx = 0, sumy = 0, num = 0;

        File file = new File("input.txt");
        Scanner scan = new Scanner(file);

        while (scan.hasNext()) {
            if (scan.hasNext.equals("x")) {
                num = scan.nextInt();
                sumx = sumx + num;
            } else {
                if (scan.hasNext.equals("y")) {
                    num = scan.nextInt();
                    sumy = sumy + num;
                }
            }
        }
        System.out.println("Sum x is: " + sumx + " Sum y is: " + sumy);
    }
}
4

3 に答える 3

2

あなたは正しい考えを持っていますが、いくつかの構文エラーと論理エラーがあります。これを完全に解決したくはありませんが、ここにいくつかのメモがあります

  1. カスケード メソッド呼び出しには、各メソッドの後にかっこが必要です。scan.hasNext().equals("x")`scan.hasNext.equals("x") とは対照的に、

  2. カスケード呼び出しを使用する場合は、各メソッドの後に返されるデータ型を考慮してください。hasNext()返されるデータ型は何ですか? そのデータ型が特定の文字列と等しいかどうかを尋ねるのは理にかなっていますか?

  3. hasNext()ファイルからデータを消費しないことに注意してください。読み取るデータがあるかどうかを確認するためにのみ使用する必要がありますが、データがある場合は、next()実際にデータを取得するためにまたはその変形を使用する必要があります。同様に、ファイルから何度も読み取らないように注意してください (2 つの異なるnext()呼び出しを使用して 1 つの変数を読み取るなど)。

  4. equals("x")正確な一致を探しています。文字列が一連の文字で始まるかどうかを確認するために使用できる他の文字列メソッドがあります。または、一致すると予想される正確なパターン (つまり、"x=") を使用する必要があります。

これらの演習の目的は、プログラマーのように考えられるようにすることです。誰かがあなたに動くコードをくれたとしても、それを使う前にすべての行を詳細に理解していることを確認してください.

于 2013-07-08T18:13:41.950 に答える
1

これを試して

 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
 public class Read {
 public static void main(String[] args) throws IOException {
    FileReader file=new FileReader("D:\\Test.txt");
    BufferedReader br=new BufferedReader(file);
    String str;
    int xSum=0;
    int ySum=0;
    while((str=br.readLine())!=null)
    {
        if(str.contains("x=")){
            xSum+=Integer.parseInt(str.split("=")[1].trim());
        }if(str.contains("y=")){
            ySum+=Integer.parseInt(str.split("=")[1].trim());
        }
    }
    System.out.println("Sum x is: "+xSum+" Sum y is: "+ySum);
}
}
于 2013-07-08T18:16:01.350 に答える