Frage

Meine Aufgabe besagt, dass er Folgendes tun soll:
Search2: Suchen Sie nach einer Lösung für x*x + y*y - 12x -10y + 36 = 0. Suche von 0 bis 10 sowohl in x als auch y und suche jeden Y -Wert, bevor sie zum nächsten x wechselt. Drucken Sie die ersten drei gefundenen Lösungen. (Hinweis - Eine beschriftete Pause ist hier praktisch!)

Ich kann die Logik dafür nicht herausfinden. Ich denke, ich muss mehr als 2 Schleifen verwenden, aber nicht sicher.
Das habe ich bisher (es wiederholt es sich nur (6,0)):

for (int j = 0; j <= 10; j++) {
    for (int i = 0; i <= 10; i++) {
        while (((i * i) + (j * j) - (12 * i) - (10 * j) + 36) == 0) {
            System.out.println("(" + i + ", " + j + ")");  
        }  
    }  
}  

AKTUALISIEREN
Hier ist die Lösung:

    int t = 0;

    for (int i = 0; i <= 10; i++) {
        if (t == 3) {
            break;
        }
        for (int j = 0; j <= 10; j++) {
            if (((i * i) + (j * j) - (12 * i) - (10 * j) + 36) == 0) {
                System.out.println("(" + i + ", " + j + ")");
                t++;
            }
        }
    }
War es hilfreich?

Lösung

Kein schlechter Versuch. Weil du so nah dran bist, zeige ich Ihnen eine funktionierende Lösung. Grundsätzlich müssen Sie drei Dinge tun:

  1. Veränderung while zu if
  2. Verwenden Sie eine Variable, um die Anzahl der Findeln der Lösung zu zählen, sodass Sie bei drei anhalten können
  3. Fügen Sie ein Etikett hinzu, damit Sie aus der äußeren Schleife innerhalb der inneren Schleife ausbrechen können

Ich empfehle auch, dass Sie Variablennamen genauso wie das Problem verwenden - dh x und y - zur Klarheit.

int count = 0;
outerLoop:
for (int y = 0; y <= 10; y++) {
    for (int x = 0; x <= 10; x++) {
        if (x * x + y * y - 12 * x - 10 * y + 36 == 0) {
            System.out.println("(" + x + ", " + y + ")");  
            if (++count == 3)
                break outerLoop;
        }
    }
}

Bei der Ausführung erzeugt dieser Code:

(6, 0)
(3, 1)
(9, 1)

Entschuldigung für die Löffel, die Sie gefüttert hat, aber ein Teil der Lektion hier ist ein guter Codierungsstil und -praxis.

Andere Tipps

Sie verwenden ein Extra while Schleife, die unbestimmt läuft.

while (((i * i) + (j * j) - (12 * i) - (10 * j) + 36) == 0) {
    System.out.println("(" + i + ", " + j + ")");  
}

Das erste Mal, dass dies auf wahr bewertet wird - dh wenn es erreicht (6,0) - wird es weiter laufen, weil i und j werden im Inneren nicht modifiziert.

Sie müssen es durch ein ersetzen if.

Schauen Sie sich die innere Schleife genau an, die Sie haben. Sobald die Lösung für die Gleichung gefunden wurde, i und j sich niemals ändern, und die Formel bewertet immer zu 0, was zu einer unendlichen Schleife führt.

Es könnte auch ratsam sein, umzubenennen i und j zu x und y für Klarheit. Sie sind meistens auf dem richtigen Weg. Vergessen Sie nicht, dass Sie nur die ersten drei Lösungen drucken müssen.

Ich werde Ihnen nicht viel helfen, da dies ein ziemlich einfaches Konzept ist. Auch nur Ihr Druck (6,0), weil Sie genau das mit der While -Schleife zu tun haben.

Ein Hinweis, Ihre while -Schleife sollte eine Erklärung haben, die seine Funktion stoppt, sagen wir, ob x <4, wenn sie jemals größer ist, oder = bis außerhalb der Schleife.

public class EquationSolver {

    public static void main(String[] args) {

        int found = 0;
        searchSolutions:
        for (int y = 0; y <= 10; y++) {
            for (int x = 0; x <= 10; x++) {
                if (((x * x) + (y * y) - (12 * x) - (10 * y) + 36) == 0) {
                    System.out.println("(" + x + ", " + y + ")");
                    found ++;
                    if (found == 3) {
                        break searchSolutions;
                    }
                }
            }

        }

    }

}

Lange Zeit habe ich zuletzt einige Hausaufgaben dieser Art geschrieben ... nur zum Spaß davon :)

public class Main {

    public static void main(String[] args) {
        int[] range = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        boolean isSolutionFound = Boolean.FALSE;
        int solCounter = 0;

        searchSolutions:
        for (Integer y : range) {
            for (Integer x : range) {
                isSolutionFound = checkForSolution(x, y);
                if (isSolutionFound) {
                    printSolution(x, y);
                    solCounter++;
                }

                if (solCounter == 3) 
                    break searchSolutions;
            }
        }
    }

    private static void printSolution(Integer x, Integer y) {
        System.out.println(x + "," + y); // use some fancy formatting instead
    }

    private static boolean checkForSolution(int x, int y) {
        if (x * x + y * y - 12 * x - 10 * y + 36 == 0)
            return true;
        else
            return false;
    }

}
for (int j = 0; j <= 10; j++)
{
   for (int i = 0; i <= 10; i++)
   {
      if (((i * i) + (j * j) - (12 * i) - (10 * j) + 36) == 0)
      {
         System.out.println("(" + i + ", " + j + ")");
         return;
      }  
   }  
} 

Es ist importiert, sich an die zu erinnern return; Teil, da Sie sonst noch nach Lösungen suchen würden, obwohl Sie bereits einen gefunden haben. Wenn Sie nicht mehr Lösungen wünschen, sollten Sie die "Return" -serklärung weglassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top