【问题标题】:Java do while loop back to the beginning of applicationJava do while 循环回到应用程序的开头
【发布时间】:2014-06-29 11:18:58
【问题描述】:

此问题是此链接Java SE do while loop issues的后续问题

这是一个询问房间名称的应用程序,然后第二次提示询问其尺寸以执行一些计算。一切都完成后,应用程序应该能够返回到第一个提示询问房间名称等的提示。

class Room
{
private String name;
private double length;
private double width;
private double height;

public Room(String r, double l, double w, double h)
{
    name = r;
    length = l;
    width = w;
    height = h;
}


public String getName()
{
    return name;
}

public double getLength()
{
    return length;
}

public double getWidth()
{
    return width;
}

public double getHeight()
{
    return height;
}

public double getArea()
{
    double area = length*width;
    return area;
}

public double getVolume()
{
    double volume = length*width*height;
    return volume;  
}

public void setName(String s)
{
    name = s;
}
}

还有我运行应用程序的主要方法。

import java.util.Scanner;

class TestRoom
{
public static void main(String [] args)
{
    Scanner userInput = new Scanner(System.in);
    System.out.println("Please enter the name of room");

    String roomName = userInput.next();
    while(!(roomName.equals("quit")))
    {           
        Room r;
        do
        {
            Scanner dimensionsInput = new Scanner(System.in);
            System.out.print("Please enter the dimensions of the room, length, width and height accordingly");

            double roomLength = dimensionsInput.nextDouble();
            double roomWidth = dimensionsInput.nextDouble();
            double roomHeight = dimensionsInput.nextDouble();

            r = new Room(roomName, roomLength, roomWidth, roomHeight);
        }
        while (r.getLength() == 0 || r.getWidth() == 0 || r.getHeight() == 0);


        System.out.println("The name of room: " + r.getName() + " Dimensions: L= " + r.getLength() + 
                                " X " + "W= " + r.getWidth() + " X " + "H= " + r.getHeight());
        System.out.println("Area of room= " + r.getArea());
        System.out.println("Volume of room= " + r.getVolume());

    }
    userInput.close();
}
}

现在应用程序只返回第二个提示而不是第一个提示,所以你们能帮我解决这个问题吗?再次提前感谢各位!

【问题讨论】:

  • 需要在while循环中包含第一个提示不是很明显吗?
  • 房间名称的提示应该在循环内部,而不是外部,因为您希望它重复。
  • @JBNizet 我已经剪切了提示并将其粘贴到代码 Room r 的正上方;但是虽然编译没问题但是没有运行。
  • 编辑您的问题并在底部发布您的新代码。定义“它不运行”。发生什么了?您意识到您必须继续阅读用户要求他输入某些内容之后输入的内容,对吧?
  • 编辑您的问题,在原始问题末尾显示您最近的尝试作为附加代码,显示您遇到的错误。也可以使用调试器或使用 println 语句来帮助您调试。

标签: java loops while-loop do-while


【解决方案1】:

您无需声明两个扫描仪。您显然还必须将第一个提示包含在外部 while 循环中。

“固定”代码:

import java.util.Scanner;

class TestRoom
{
    public static void main(String[] args)
    {
        Scanner userInput = new Scanner(System.in);
        String roomName = "";

        while (!(roomName.equals("quit")))
        {
            System.out.println("Please enter the name of room");

            roomName = userInput.next();

            Room r;

            do
            {
                System.out
                        .print("Please enter the dimensions of the room, length, width and height accordingly");

                double roomLength = userInput.nextDouble();
                double roomWidth = userInput.nextDouble();
                double roomHeight = userInput.nextDouble();

                r = new Room(roomName, roomLength, roomWidth, roomHeight);
            } while (r.getLength() == 0 || r.getWidth() == 0
                    || r.getHeight() == 0);

            System.out.println("The name of room: " + r.getName()
                    + " Dimensions: L= " + r.getLength() + " X " + "W= "
                    + r.getWidth() + " X " + "H= " + r.getHeight());
            System.out.println("Area of room= " + r.getArea());
            System.out.println("Volume of room= " + r.getVolume());
        }

        userInput.close();
    }
}

【讨论】:

  • 哇,谢谢,但这行是什么意思?字符串房间名 = "";
  • 表示该String被分配了一个空String。 null 不好,因为在其上调用方法会抛出 NullPointerException。在此示例中,可以分配除 quit 之外的任何字符串,因为它会跳过外部 while 循环。
【解决方案2】:

试试这个:

 class TestRoom {

    static Scanner userInput = new Scanner(System.in);

    static Scanner dimensionsInput = new Scanner(System.in);

    public static void main(String[] args) {

        while(true) {
            prompt();
        }

    }

    private static void prompt() {
        System.out.println("Please enter the name of room");

        String roomName = userInput.next();

        if (roomName.equals("quit")){
            userInput.close();
            dimensionsInput.close();
            System.exit(0);
        }
        Room r;
        do
        {
            System.out
                    .print("Please enter the dimensions of the room, length, width and height accordingly");

            double roomLength = dimensionsInput.nextDouble();
            double roomWidth = dimensionsInput.nextDouble();
            double roomHeight = dimensionsInput.nextDouble();
            r = new Room(roomName, roomLength, roomWidth, roomHeight);
        } while (r.getLength() == 0 || r.getWidth() == 0
                || r.getHeight() == 0);


        System.out.println("The name of room: " + r.getName()
                + " Dimensions: L= " + r.getLength() + " X " + "W= "
                + r.getWidth() + " X " + "H= " + r.getHeight());
        System.out.println("Area of room= " + r.getArea());
        System.out.println("Volume of room= " + r.getVolume());
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多