Java 'do while' 循环不工作
Java 'do while' loop not working
我有这个代码:
import java.util.*;
public class Vormpjes {
public static void main(String[] args){
String vorm;
String nogmaals;
double diameter;
double basis;
double hoogte;
Scanner keyboard = new Scanner(System.in);
do {
System.out.println("Kies uit de 'cirkel', 'driehoek' of 'vierhoek':");
vorm = keyboard.nextLine();
if (vorm.equals("cirkel")){
System.out.println("Geef een diameter op (in cm)");
diameter = keyboard.nextDouble();
cirkel C1 = new cirkel();
C1.setDiam(diameter);
System.out.println("De diameter = " + C1.getDiam() + " cm");
System.out.println("De straal = " + C1.getRadius() + " cm");
System.out.println("De oppervlakte van de cirkel = " + C1.berekenOpp() + " cm2");
System.out.println("");
}
if (vorm.equals("driehoek")){
System.out.println("Geef de basis van de driehoek (in cm)");
basis = keyboard.nextDouble();
driehoek D1 = new driehoek();
D1.setBasis(basis);
System.out.println("Geef de hoogte van de driehoek (in cm)");
hoogte = keyboard.nextDouble();
D1.setHoogte(hoogte);
System.out.println("De oppervlakte = " + D1.berekenOppDriehoek() + " cm2");
System.out.println("");
}
System.out.println("Typ 'J' in als u het programma nogmaals wilt uitvoeren, druk anders op een andere wilekeurige toets.");
nogmaals = keyboard.nextLine();
}
while (nogmaals.equalsIgnoreCase("J"));
}
}
还有 class 'cirkel'(这就是你在荷兰语中拼写 circle 的方式哈哈)
public class cirkel extends Vormpjes{
public double diam;
public double r;
//constructor
public cirkel(){
}
public double getDiam(){
return this.diam;
}
public void setDiam(double diam){
this.diam = diam;
}
public double getRadius(){
r = 0.5 * getDiam();
return this.r;
}
public double berekenOpp(){
return Math.PI * r * r;
}
public double berekenOmtrek(){
return 2 * Math.PI * r;
}
}
当程序询问用户是否要再次 运行 程序时,我无法在 while 条件后输入任何内容。
为什么不起作用?我没有收到任何错误或任何信息...
每次您调用 nextDouble()
时,用户都会输入一个双精度值,然后 按下回车键 。这将在缓冲区中放置一个双精度和一个换行符。双倍被 nextDouble()
消耗,但换行符会一直存在,直到您调用 nextLine()
.
在您的情况下,这会成为一个问题,因为当您向用户询问 J
(或其他内容)时,"old" 换行符在用户设法输入任何内容之前被消耗掉。
换句话说,只需更改
diameter = keyboard.nextDouble();
到
diameter = keyboard.nextDouble();
keyboard.nextLine();
消耗双倍后输入的换行符。
使用以下代码读取 J/N 值,以继续或停止程序。
nogmaals = keyboard.next();
我有这个代码:
import java.util.*;
public class Vormpjes {
public static void main(String[] args){
String vorm;
String nogmaals;
double diameter;
double basis;
double hoogte;
Scanner keyboard = new Scanner(System.in);
do {
System.out.println("Kies uit de 'cirkel', 'driehoek' of 'vierhoek':");
vorm = keyboard.nextLine();
if (vorm.equals("cirkel")){
System.out.println("Geef een diameter op (in cm)");
diameter = keyboard.nextDouble();
cirkel C1 = new cirkel();
C1.setDiam(diameter);
System.out.println("De diameter = " + C1.getDiam() + " cm");
System.out.println("De straal = " + C1.getRadius() + " cm");
System.out.println("De oppervlakte van de cirkel = " + C1.berekenOpp() + " cm2");
System.out.println("");
}
if (vorm.equals("driehoek")){
System.out.println("Geef de basis van de driehoek (in cm)");
basis = keyboard.nextDouble();
driehoek D1 = new driehoek();
D1.setBasis(basis);
System.out.println("Geef de hoogte van de driehoek (in cm)");
hoogte = keyboard.nextDouble();
D1.setHoogte(hoogte);
System.out.println("De oppervlakte = " + D1.berekenOppDriehoek() + " cm2");
System.out.println("");
}
System.out.println("Typ 'J' in als u het programma nogmaals wilt uitvoeren, druk anders op een andere wilekeurige toets.");
nogmaals = keyboard.nextLine();
}
while (nogmaals.equalsIgnoreCase("J"));
}
}
还有 class 'cirkel'(这就是你在荷兰语中拼写 circle 的方式哈哈)
public class cirkel extends Vormpjes{
public double diam;
public double r;
//constructor
public cirkel(){
}
public double getDiam(){
return this.diam;
}
public void setDiam(double diam){
this.diam = diam;
}
public double getRadius(){
r = 0.5 * getDiam();
return this.r;
}
public double berekenOpp(){
return Math.PI * r * r;
}
public double berekenOmtrek(){
return 2 * Math.PI * r;
}
}
当程序询问用户是否要再次 运行 程序时,我无法在 while 条件后输入任何内容。
为什么不起作用?我没有收到任何错误或任何信息...
每次您调用 nextDouble()
时,用户都会输入一个双精度值,然后 按下回车键 。这将在缓冲区中放置一个双精度和一个换行符。双倍被 nextDouble()
消耗,但换行符会一直存在,直到您调用 nextLine()
.
在您的情况下,这会成为一个问题,因为当您向用户询问 J
(或其他内容)时,"old" 换行符在用户设法输入任何内容之前被消耗掉。
换句话说,只需更改
diameter = keyboard.nextDouble();
到
diameter = keyboard.nextDouble();
keyboard.nextLine();
消耗双倍后输入的换行符。
使用以下代码读取 J/N 值,以继续或停止程序。
nogmaals = keyboard.next();