Java - 仅打印名字(我想要全名)(包括另一个错误)

时间:2013-11-05 18:31:22

标签: java output

我制作了一个程序,可以读取一个人的姓名和年龄,以及什么时候#z;" zzz"输入后,它会打印18岁或以上的所有人的姓名和年龄。另外,我想计算18岁或以上的人的百分比。但是,问题就出现了:我发布的代码如下,只打印出名字(例如:" Ricardo Almeida"年龄" 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) +"%.");
            }
    }

}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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()方法。