0

人の名前と年齢を読み取るプログラムを作成しています。「zzz」と入力すると、18 歳以上のすべての人の名前と年齢が出力されます。また、18 歳以上の人の割合を計算したいと思います。しかし、ここに問題があります:私が以下に投稿しているコードは、最初の名前のみを出力します(例:「リカルド・アルメイダ」と年齢「19」。出力:「リカルド:19」ですが、「リカルド・アルメイダ:19」が必要です)。パーセンテージの計算にもエラーがありますが、何が間違っているのかわかりません. 常に 0 を返します. (完了!)これを読んで助けようとしている人に感謝します.

PS: 配列は使いたくない! 私はすでにそれらの使い方を学びましたが、それらを使わずにこれを解決する方法を知りたいです:)

package javaapplication38;
import java.util.Scanner;
public class JavaApplication38 {
private static final Scanner in=new Scanner(System.in);

private static String metodo1(String name, int age) {
    String frase="";
    if (age==18 | age>18) {
        frase=String.format("%s : %d %n",name,age);
    }
    return frase;
}

public static void main(String[] args) {
   int age, counter1=0, counter2=0;
   String name, acumtxt="", aux;

   do {
        System.out.print("Name: ");
        name=in.next(); in.nextLine();
        if (!"ZZZ".equalsIgnoreCase(name)) {
            counter1++;
            do {
                System.out.print("Age: ");
                age=in.nextInt();
            } while (age<=0);
            if (age==18 | age>18) {
                counter2++;
            }
            aux=metodo1(name,age);
            acumtxt+=aux;
        }
    } while(!"ZZZ".equalsIgnoreCase(name));

    System.out.print(acumtxt);
    if (counter1>0) {
            System.out.println("The percentage of people who's 18 or older is "+ (counter2/counter1) +"%.");
            }
    }

}

4

2 に答える 2

0

in.next()空白がなくなるまで読み取ります。in.nextLine ( http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine() ) または[BufferedReader]( http://docs.oracle.com/代わりにjavase/7/docs/api/java/io/BufferedReader.html )、メソッドを呼び出すことができますreadLine()

于 2013-11-05T18:38:04.883 に答える
0

あなたの問題はここにあるようです

name=in.next(); in.nextLine();

このコードnext()では、空白または行末が見つかるまで、行から 1 つの単語のみを読み取り、返します。残りは で消費されreadLine()ますが、その結果は無視されます。たぶん試してみてください

name=in.nextLine();

行全体を読む。

その後、あなたも変更する必要があります

age=in.nextInt();

そしてどちらかを使用

age=Integer.parseInt(in.nextLine());

またはその後に追加して、次の質問in.nextLine()に影響する新しい行マークも消費します。name

age=in.nextInt(); in.nextLine();//add in.nextLine(); to consume new line marks
于 2013-11-05T18:37:34.740 に答える