Java 如何接受用户输入并将其置于while状态
这是我的代码,while循环没有输入,Java 如何接受用户输入并将其置于while状态,java,loops,while-loop,Java,Loops,While Loop,这是我的代码,while循环没有输入,rep变量不接受输入: import java.util.Scanner; 公共类混合数据{ 公共静态void main(字符串[]args){ 字符串rep=“”; 做{ 扫描仪键盘=新扫描仪(System.in); 系统输出打印(“输入您的全名”); 字符串名称=keyboard.nextLine(); System.out.print(“输入您的GPA:”); double gpa=keyboard.nextDouble(); System.out.p
rep
变量不接受输入:
import java.util.Scanner;
公共类混合数据{
公共静态void main(字符串[]args){
字符串rep=“”;
做{
扫描仪键盘=新扫描仪(System.in);
系统输出打印(“输入您的全名”);
字符串名称=keyboard.nextLine();
System.out.print(“输入您的GPA:”);
double gpa=keyboard.nextDouble();
System.out.println(“名称:+Name+”,GPA:+GPA);
System.out.println(“您想输入另一个学生的数据吗?(y/n)”);
rep=键盘.nextLine();
}//这不接受输入
而(代表等于(“y”));
}
}
您需要跳过空行
publicstaticvoidmain(字符串[]args){
字符串代表;
扫描仪键盘=新扫描仪(System.in);
做{
系统输出打印(“输入您的全名”);
字符串名称=keyboard.nextLine();
System.out.print(“输入您的GPA:”);
double gpa=keyboard.nextDouble();
System.out.println(“名称:+Name+”,GPA:+GPA);
System.out.println(“您想输入另一个学生的数据吗?(y/n)”);
rep=键盘.next();
keyboard.skip(“\r\n”);//跳过空行
}
while(rep.equalsIgnoreCase(“y”));
键盘关闭();
}
以下是使用while循环而不是do-while的相同代码。它按照你想要的方式工作
import java.util.Scanner;
公共类混合数据{
公共静态void main(字符串[]args){
字符串rep=“y”;
而(!rep.equals(“n”)){
扫描仪键盘=新扫描仪(System.in);
System.out.print(“输入您的全名:”);
字符串名称=keyboard.nextLine();
System.out.print(“输入您的GPA:”);
double gpa=keyboard.nextDouble();
System.out.println(“名称:+Name+”,GPA:+GPA);
System.out.println(“您想输入另一个学生的数据吗?(y/n)”);
rep=键盘.next();
}
}
}
使用而不是:
publicstaticvoidmain(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
字符串rep=“”;
做{
System.out.println(“输入您的全名:”);
字符串名称=keyboard.nextLine();
System.out.println(“输入您的GPA:”);
//double gpa=keyboard.nextDouble();
double-gpa=double.parseDouble(keyboard.nextLine());
System.out.println(“名称:+Name+”,GPA:+GPA);
System.out.println(“您想输入另一个学生的数据吗?(y/n)”);
rep=键盘.nextLine();
}而(代表等于(“y”));
键盘关闭();
}
或者在rep=keyboard.nextLine()之前再添加一个keyboard.nextLine()
编码>(以清除换行符),或使用以下命令读取您的双gpa值:
double gpa = Double.parseDouble(keyboard.nextLine());
重要的这里要理解的一点(特别是如果您是Java新手)是,为什么您的代码不工作,即您调用nextDouble()
作为Scanner实例上的最后一个方法,并且它不会将光标移动到下一行
更详细一点:
模式化的所有方法(如nextDouble()
,nextInt()
,等等),除了nextLine()
,读取输入的下一个标记,但如果标记不是新行字符,则光标不会移动到下一行。当您输入double value并点击enter
时,实际上您给了输入流两个标记:一个double value和一个新行字符,double value初始化到变量中,新行字符保留在输入流中。下次调用nextLine()
时,将读取非常新的行字符,这将为您提供一个空字符串。这是否回答了您的问题?