簡體   English   中英

Java嵌套循環循環

[英]Java Nested Do-While Loops

因此,我創建了一個程序,假設該程序可以比較兩個矩形,一個參考矩形和一個測試矩形,以檢查測試是否在參考范圍內,或者測試是否與參考重疊,或者它們是否共享邊界,或者不同。

我的程序必須先讀取一個參考矩形,然后再讀取測試矩形,但是在程序完成后,用戶應該能夠選擇是重復整個程序並輸入一個新的參考矩形,還是僅重復輸入它們的部分。測試矩形。

我創建了一個大型的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;
        }
        }
        }
    }       
}
}

任何幫助,不勝感激,謝謝!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM