为什么这个循环不承认前两个输入?

时间:2017-05-08 19:56:09

标签: java while-loop do-while

我正在编写一个主要方法,要求用户以锥体的半径和高度的形式输入,然后调用其他3种数学方法来确定锥体底部的区域,以及它的表面积和体积。

这个想法是你应该能够输入几组输入,并通过输入" q"表示你已经完成了。示例输入可以例如是" 10 5 6 8 7 5 q"。然后程序应该计算三次,有两组半径和高度,然后打破循环。相反,它忽略了前两个输入,并完美地完成了剩下的四个输入。它基本上计算n-1组高度和半径,其中n是提供的集合数。我非常感谢你的帮助。

base_estimator_

3 个答案:

答案 0 :(得分:1)

您的代码问题在于您从未使用int循环中扫描的前两个while。这样做:

    while (true)       //Infinite loop
    {
        if (scan.hasNextInt())       //If next input is an integer, read it
        {
            radius = scan.nextInt();
            height = scan.nextInt();
        } else if (scan.next().equals("q")) break;
        System.out.print(radius);
        System.out.println(height);
    }`

或者,只需检查int

int radius;
int height;

//provided user would be entering radius and height in pairs
while (scan.hasNextInt()) {
    radius = scan.nextInt();
    height = scan.nextInt();
    //Call your methods
}

或者,由于您不知道用户输入的参数数量,因此最好为半径和高度创建ArrayList并向列表添加输入然后处理它们从列表中。这有助于您在退出while循环后保留输入:

    ArrayList<Integer> radiusList = new ArrayList<>();
    ArrayList<Integer> heightList = new ArrayList<>();


    while (scan.hasNextInt()) {
        radiusList.add(scan.nextInt();
        heightList.add(scan.nextInt());
    }

    int radius;
    int height;
    for (int i = 0; i < radiusList.size(); i++) {
        radius = radiusList.get(i);
        height = heightList.get(i);
        //Call your methods.
    }

答案 1 :(得分:1)

您最初读的是两个整数。但是,这两个整数从未在您的程序中使用过。因此,他们被扔掉了。

要么消除第二个循环并向上移动输出。或者,在第二次循环之前复制输出。

答案 2 :(得分:0)

while(true)       //Infinite loop
{   
if (scan.hasNextInt())       //If next input is an integer, read it
{
radie = scan.nextInt();
height = scan.nextInt();
}
else if (scan.next().equals('q'))
{                          //If it instead if "q", break the loop  
    break;
}
     System.out.print("r = "+radius);
     System.out.println("h = "+height);
     System.out.println("Bottom area:      "+ area(radius));
     System.out.println("Surface area:   "+area(radie, height));
     System.out.println("Volume:              "+ volume(radius, height));

}

}