0

何らかの理由でこれを機能させることができません。トランザクションを読み取るアプリがあります。空の行が入力されたときに、いくつかのものを印刷する必要があります。

    int transationCount = 0;
    while(sc.hasNext())
    {
        String trans = sc.next();


            String mode = trans.substring(0, 1);
            Double amount = Double.valueOf(trans.substring(1));

            if(mode.equals("C"))
            {
                c.charge(amount);
                ps.println(c.getBalance());
                transationCount = transationCount + 1;
            }
            else if(mode.equals("P"))
            {
                c.pay(amount);
                ps.println(c.getBalance());
                transationCount = transationCount + 1;
            }
    }
    ps.println(c.getBalance());
    ps.println(transationCount);

私は試した

while(sc.hasNext() && !(sc.next().equals("")))

動作しません。whileループ内にも追加してみました

else if (!(trans.equals("")) {break;}
4

3 に答える 3

2

デフォルトでは、空の行は有効なトークンではないため、スキャナーによって無視されます。

行が空かどうかを手動で確認できます。

public static void main(String[] args) throws Exception {
    Scanner sc = new Scanner(System.in);

    while(true) {
        String line = sc.nextLine();
        if (line.isEmpty()) {
            System.out.println("Empty line entered");
        } else {
            System.out.println("received line: " + line);
            String[] tokens = line.split("\\s+");
            System.out.println("tokens: " + Arrays.toString(tokens));
        }
    }
}
于 2012-11-27T20:07:38.830 に答える
1

スキャナはデフォルトの区切り文字 (空白) を使用して入力をトークン化しています。これは、行に関係なく、トークンが単語であることを意味します。

some

word

まったく同じように、2 つのトークンのみを返します。

some word

本当に必要なのは、行を別々に取得して、どの行が空で、どの行に何かが含まれているかを判断することです。これを行うには、改行をセパレーターとして使用します。

Scanner.useDelimiter("\\n");

または、BufferedReader を使用することもできます。BufferedReader.readLine()を参照してください。

同じ行にある 2 つの単語が同じtrans文字列に含まれることに注意してください。String.split メソッドを使用して、各単語を個別に取得できます。

于 2012-11-27T20:25:33.503 に答える