【问题标题】:Java Nested Do-While LoopsJava 嵌套的 Do-While 循环
【发布时间】:2016-08-06 16:38:44
【问题描述】:

所以我创建了这个程序,它假设比较两个矩形,一个参考矩形和一个测试矩形,以检查测试是否在参考内,或者测试是否与参考重叠,或者它们是否共享边界,或者如果它们是不同的。

我的程序必须先读入一个参考矩形,然后再读入测试矩形,但是在程序完成后,用户应该能够选择是重复整个程序并输入一个新的参考矩形,还是只重复其中的部分他们进入测试矩形。

我创建了一个包含第二个测试 while 循环的大型参考 while 循环,并使它们具有不同的 repeatInt 变量。我不确定我的问题出在哪里,因为当用户输入 2 时,程序在测试矩形输入部分正确重新启动,但是当他们输入 1 时,程序再次在测试输入部分重新启动,此时它应该回到参考的开头输入部分并再次运行整个程序。

这是我的代码:

 import java.util.Scanner;

public class TestMyRectangle2D {

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    MyRectangle2D refrec = new MyRectangle2D();
    MyRectangle2D testrec = new MyRectangle2D();

    double refx;
    double refy;
    double refwidth;
    double refheight;

    double testx;
    double testy;
    double testwidth;
    double testheight;

    double pointx;
    double pointy;

    int repeatInt = 1;
    int repeatInt2 = 1;

    boolean ContinueRefWidthLoop = true;
    boolean ContinueRefHeightLoop = true;
    boolean ContinueTestWidthLoop = true;
    boolean ContinueTestHeightLoop = true;

    System.out.println("This program will ask you to enter the center coordinates, height, and width of the reference rectangle which will be the reference for the following comparisons with an additional test rectangle and test point. The program will be able to tell you if the point you enter is within the reference rectangle, it will also test the test rectangle to see if it is either contained, overlapping, abut, or distinct with the reference rectangle");

    //Reference loop for rectangle
    while(repeatInt == 1){
        System.out.println("Please enter a numerical value for the reference rectangle's center x coordinate");
        refx = in.nextDouble();
        refrec.setX(refx);
        System.out.println("Please enter a numerical value for the reference rectangle's center y coordinate");
        refy = in.nextDouble();
        refrec.setY(refy);
        do{
            try {
                System.out.println("Please enter a numerical value for the reference rectangle's width");
                refwidth = in.nextDouble();
                refrec.setWidth(refwidth);

                ContinueRefWidthLoop = false;
            }
            catch (Exception e){
                System.out.println(refrec.getErrorMessage());
                ContinueRefWidthLoop = true;
            }
        } while (ContinueRefWidthLoop);

        do{
            try{
                System.out.println("Please enter a numerical value for the reference rectangle's height");
                refheight = in.nextDouble();
                refrec.setHeight(refheight);

                ContinueRefHeightLoop = false;
            }
            catch (Exception e){
                System.out.println(refrec.getErrorMessage());
                ContinueRefHeightLoop = true;
            }
        }while(ContinueRefHeightLoop);

        while(repeatInt2 == 1){

        System.out.println("Please enter a numerical value for the test rectangle's center x coordinate");
        testx = in.nextDouble();
        testrec.setX(testx);
        System.out.println("Please enter a numerical value for the test rectangle's center y coordinate");
        testy = in.nextDouble();
        testrec.setY(testy);

        do {
            try{
                //Testing loop for test point and rectangle
                System.out.println("Please enter a numerical value for the test rectangle's width");
                testwidth = in.nextDouble();
                testrec.setWidth(testwidth);

                ContinueTestWidthLoop = false;
            }
            catch (Exception e){
                System.out.println(testrec.getErrorMessage());
                ContinueTestWidthLoop = true;
            }
        } while(ContinueTestWidthLoop);

        do{
            try{
                System.out.println("Please enter a numerical value for the test rectangle's height");
                testheight = in.nextDouble();
                testrec.setHeight(testheight);

                ContinueTestHeightLoop = false;
            }
            catch (Exception e){
                System.out.println(testrec.getErrorMessage());
                ContinueTestHeightLoop = true;
            }
        }while(ContinueTestHeightLoop);

        //takes in the test point coordinates
        System.out.println("Please enter a numerical value for the test point's x coordinate");
        pointx = in.nextDouble();
        System.out.println("Please enter a numerical value for the test point's y coordinate");
        pointy = in.nextDouble();

        //perform all the checks the entered point and rectangle against the reference rectangle
        //checks if test point within reference rectangle
        System.out.println("The reference rectangle's values; " + "\n" + "Center coordinates: (" + refrec.getX() + ", " + refrec.getY() + ")" + "\n" + "Width: " + refrec.getWidth() + "\n" + "Height is: "+ refrec.getHeight() + "\n" + "Area:" + refrec.getArea() + "\n" + "Perimeter: " + refrec.getPerimeter());
        System.out.println("The test point coordinates are: (" + pointx + ", " + pointy + ")");
        if(refrec.contains(pointx, pointy)){
            System.out.println("----The test point is contained within the reference rectangle!");
        }
        else{
            System.out.println("----The test point is not contained within the reference rectangle");
        }

        System.out.println("The test rectangle's values; " + "\n" + "Center coordinates: (" + testrec.getX() + ", " + testrec.getY() + ")" + "\n" + "Width is: " + testrec.getWidth() + "\n" + "Height is: "+ testrec.getHeight() + "\n" + "Area:" + testrec.getArea() + "\n" + "Perimeter: " + testrec.getPerimeter());
        //checks if test rectangle is within the reference rectangle
        if(refrec.contains(testrec)){
            System.out.println("----The test rectangle is within the reference rectangle!");
        }
        else{
            System.out.println("----The test rectangle is not within the reference rectangle");
        }
        //checks if test rectangle is overlapping the reference rectangle only if the test rectangle is not contained within the reference rectangle
        if(refrec.overlaps(testrec)){
            System.out.println("----The test rectangle is overlapping the reference rectangle!");
        }
        else{
            System.out.println("----The test rectangle is not overlapping the reference rectangle");
        }

        //checks if test rectangle is sharing the boundary with the reference rectangle
        if(refrec.abut(testrec)){
            System.out.println("----The test rectangle is sharing a boundary with the reference rectangle!");
        }
        else{
            System.out.println("----The test rectangle is not sharing a boundary with the reference rectangle");
        }

        //checks if test rectangle is distinct to the reference rectangle
        if(refrec.distinct(testrec)){
            System.out.println("----The test rectangle and the reference rectangle are distinct!");
        }
        else{
            System.out.println("----The test rectangle and the reference rectangle are not distinct");
        }

        //program loop repeat 
        System.out.println("To reenter a new reference triangle enter 1, to reenter a new test point and new test rectangle enter 2, or to end the program altogether enter 0");

        switch (in.nextInt()) {
        case 1: {
            repeatInt = 1;
            break;
        }
        case 2: {
            repeatInt2 = 1;
            break;
        }
        default: {
            repeatInt = repeatInt2 = 0;
        }
        }
        }
    }       
}
}

非常感谢任何帮助,谢谢!

【问题讨论】:

    标签: java while-loop do-while


    【解决方案1】:

    repeatIntreapeatInt2 都设置为 1,并且只有在用户选择结束程序时才会更改。当他们选择如何重新启动时,您需要在最后更改这些值。

    switch (in.nextInt()) {
        case 1: {
            repeatInt = 1;
            repeatInt2 = 0; // add this line here
            break;
        }
        case 2: {
            repeatInt2 = 1;
            break;
        }
        default: {
            repeatInt = repeatInt2 = 0;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      相关资源
      最近更新 更多