我制作了一个程序,可以读取一个人的姓名和年龄,以及什么时候#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) +"%.");
}
}
}
答案 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()
方法。