2016-08-06 48 views
0

Also habe ich dieses Programm erstellt, das zwei Rechtecke, ein Referenzrechteck und ein Testrechteck vergleichen soll, um zu überprüfen, ob der Test innerhalb der Referenz liegt, oder ob der Test die Referenz überlappt sie teilen eine Grenze, oder wenn sie verschieden sind.Java geschachtelte Do-While-Schleifen

Mein Programm muss zuerst ein Referenzrechteck einlesen und dann das Testrechteck, aber nachdem das Programm beendet ist, sollte der Benutzer wählen können, ob er entweder das ganze Programm wiederholt und ein neues Referenzrechteck eingibt oder nur das Teil wiederholt wo sie das Testrechteck betreten.

Ich erstellte eine große Referenz While-Schleife, die die zweite Test While-Schleife umfasste und machte sie verschiedene repeatInt-Variablen. Ich bin mir nicht sicher, wo mein Problem ist, denn wenn der Benutzer 2 eingibt, startet das Programm korrekt im Eingabebereich des Testrechtecks ​​neu, aber wenn sie 1 eingeben, startet das Programm erneut am Testeingabeabschnitt, wenn es zum Anfang der Referenz zurückkehren soll Eingabeabschnitt und führen Sie das gesamte Programm erneut aus.

Hier ist mein Code: wird sehr geschätzt

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

Jede Hilfe, danke!

Antwort

0

Sowohl repeatInt als auch reapeatInt2 sind beide auf 1 gesetzt und werden nur geändert, wenn der Benutzer das Programm beenden möchte. Sie müssen diese Werte am Ende ändern, wenn Sie den Neustart auswählen.

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