Java'do while'循环不起作用

时间:2015-06-04 19:35:15

标签: java loops while-loop

我有这段代码:

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"));
    }
}

班级'cirkel'(这就是你用荷兰语拼写圈子的方式哈哈)

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;
    }

}

当程序询问用户是否要再次运行程序时,我无法在条件之后键入任何内容。

为什么不起作用?我没有得到任何错误或其他任何事情......

2 个答案:

答案 0 :(得分:2)

每次拨打nextDouble()时,用户都会输入一个双击按Enter 。这将在缓冲区中放置一个double和一个换行符。双倍由nextDouble()消耗,但换行符会一直存在,直到您调用nextLine()

在您的情况下,这会成为一个问题,因为当您向用户询问J(或其他内容)时,在用户设法输入任何内容之前会消耗“旧的”换行符。

换句话说,只需更改

即可
diameter = keyboard.nextDouble();

diameter = keyboard.nextDouble();
keyboard.nextLine();

使用双精度后输入的换行符。

答案 1 :(得分:1)

使用以下代码读取J / N值,以继续或停止程序。

nogmaals = keyboard.next();