Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何接受用户输入并将其置于while状态_Java_Loops_While Loop - Fatal编程技术网

Java 如何接受用户输入并将其置于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

这是我的代码,while循环没有输入,
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()
时,将读取非常新的行字符,这将为您提供一个空字符串。

这是否回答了您的问题?