0

我正在制作一个读取一个人的姓名和年龄的程序,当输入“zzz”时,它会打印所有 18 岁或以上的人的姓名和年龄。另外,我想计算 18 岁或以上的人的百分比。但是,问题出在这里:我在下面发布的代码只打印名字(例如:“Ricardo Almeida”和年龄“19”。输出:“Ricardo:19”,但我想要“Ricardo Almeida: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

看来你的问题就在这里

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

在此代码next()中,从行中仅读取并返回一个单词,直到找到空格或行尾。其余部分与 一起使用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 回答
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 回答