2016-06-04 11 views
-2

Also habe ich ein Kompositionsprogramm, das eine Point Klasse hat und innerhalb dieser eine Line Klasse, die die Point-Klasse isValid Methode verwendet, um sicherzustellen, dass ein Benutzer korrekte Werte eingibt, bevor Sie fortfahren.Wie kann sichergestellt werden, dass Benutzer korrekte Koordinatenwerte eingeben?

Grundsätzlich, wenn sie die Werte in der enterLine() in meiner Hauptklasse eingeben, sollten sie eingeben müssen, bis es die Regeln isValid() in Point und validateLine() in Zeile erfüllt.

// This method is in the Point class and will be used by validateLine() 
public static boolean isValid(int x, int y) 
{ 
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
    int maxHeight = screenSize.height; 
    int maxWidth = screenSize.width; 

    if (x < 0 || y < 0 || x > maxWidth || y > maxHeight) 
    { 
    return false; 
    } 
    return true; 
} 


// This method is in the Line class, uses isValid() from Point Class 
public static boolean validateLine(int x1, int y1, int x2, int y2, int width) 
{ 
    if (Point.isValid(x1, y1) && Point.isValid(x2, y2)) 
    { 
     return true; 
    } 
    return false; 
} 


// This method is in main, it prompts user to enter two valid Points. 
public static Line enterLine(int line, Scanner kb) 
{ 
    System.out.println("Please enter two x's and y's values, a width, and color"); 
    int x1 = kb.nextInt(); 
    int x2 = kb.nextInt(); 
    int y1 = kb.nextInt(); 
    int y2 = kb.nextInt(); 
    int newWidth = kb.nextInt(); 
    String color = kb.next(); 


    return new Line(x1, x2, y1, y2, color, newWidth); 

} 
+0

Und was ist das Problem? – vanje

Antwort

0

Angenommen, Sie fragen, wie oft der Benutzer für x und y Werte zu veranlassen, wenn es nicht gültig ist, dann würden Sie verwenden eine do while oder while Schleife.

Sie tun würde, etwas Ähnliches wie:

public static Line enterLine(int line, Scanner kb) { 
    do { 
     System.out.println("Please enter two x's and y's values, a width, and color"); 
     int x1 = kb.nextInt(); 
     int x2 = kb.nextInt(); 
     int y1 = kb.nextInt(); 
     int y2 = kb.nextInt(); 
     int newWidth = kb.nextInt(); 
     String color = kb.next(); 
} while(!validateLine(x1, y1, x2, y2, newWidth)); 

    return new Line(x1, x2, y1, y2, color, newWidth); 

} 
+0

Ah, ok. Aber weil die 'validateLine' Parameter nicht mit dieser Methode gefunden werden, wie könnte ich das beheben? Vielen Dank. – CenturiDamos

+0

Stellen Sie zunächst sicher, dass die Methoden 'isValid' und' validateLine' in derselben Klasse sind. Wenn Sie diese Methoden dann von einer anderen Klasse aufrufen, erstellen Sie eine neue Instanz einer Klasse und rufen diese Methoden dann auf. Zum Beispiel 'ClassName newClass = new ClassName();' Dabei ist 'ClassName' der Name der Klasse, die die Methoden' isValid' und 'validateLine' enthält. Dann würden Sie 'newClass.validateLine()' – Baleroc

+0

aufrufen Das Programm ist eine Zusammensetzung, die bedeutet, dass es eine äußere Klasse 'Punkt' mit einer inneren Klasse' Linie' gibt. 'Line' hat die' validateLine() 'und' Point' die 'isValid' wie von meiner Aufgabe benötigt. Ich habe auch eine Instanz-Klasse für die "Line" erstellt, wie in "Line line1 = new Line();" Nun sollte ich 'line1' als Parameter zur aktuellen Methode' enterLine() 'hinzufügen und dann die' line1. validateLine() '? – CenturiDamos

Verwandte Themen