Question

Ma mission dit effectuer les opérations suivantes:
Search2: recherche d'une solution à x * x + y * y - 12x -10y + 36 = 0. Recherche de 0 à 10 dans les deux x et y, recherche toutes les valeurs y avant de passer à la suivante x. Imprimer les trois premières solutions trouvées. (Note - une pause marquée est ici à portée de main)

Je ne peux pas comprendre la logique pour cela. Je pense que je dois utiliser plus de 2 boucles, mais pas sûr.
Voilà ce que j'ai jusqu'à présent (Il répète simplement (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 + ")");  
        }  
    }  
}  

Mise à jour
Voici la solution:

    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++;
            }
        }
    }
Était-ce utile?

La solution

Pas une mauvaise tentative. Parce que vous êtes si proche, je vais vous montrer une solution de travail. En gros, vous devez faire trois choses:

  1. Modifier while à if
  2. Utilisez une variable pour compter le nombre de fois que vous trouvez la solution, de sorte que vous pouvez arrêter à trois
  3. Ajouter une étiquette afin que vous puissiez sortir de la boucle extérieure à partir de la boucle intérieure

Je recommande également d'utiliser des noms de variables les mêmes que le problème - à savoir x et y -. Pour plus de clarté

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

Lorsqu'il est exécuté, ce code produit:

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

Désolé pour l'alimentation cuillère vous, mais une partie de la leçon est un bon style de codage et la pratique ici.

Autres conseils

Vous utilisez une boucle de while supplémentaire qui fonctionne indefinetly.

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

La première fois est évaluée à vrai - à savoir quand il atteint (6,0) -. Il continuera à fonctionner parce i et j ne sont pas modifiés dans

Vous devez le remplacer par un if.

Prenez un bon coup d'œil à la boucle while intérieure que vous avez. Une fois la solution à l'équation se trouve, i et j ne changent jamais, et la formule toujours Equivaut à 0, ce qui entraîne dans une boucle infinie.

Il peut aussi être judicieux de renommer i et j à x et y, pour plus de clarté. Vous êtes la plupart du temps sur la bonne voie bien. Ne pas oublier que vous suffit d'imprimer les trois premières solutions.

Je ne vais pas vous aider beaucoup car cela est un concept assez de simple, mais pensez à ce que vous devez faire une boucle à travers, il pourrait le rendre plus facile à utiliser à la place x et y instad de i ou j. De plus, votre impression seulement (6,0) parce que c'est exactement ce que vous dit de faire avec la boucle while.

Un indice, votre boucle while devrait avoir une déclaration qui arrête sa fonction, permet de dire que si x <4, si elle est toujours plus ou = à qu'elle continuera en dehors de la boucle.

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

        }

    }

}

Long temps ma dernière lettre des devoirs de ce genre ... juste pour le plaisir:)

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

Il est l'importation de se rappeler la partie return; que vous auriez toujours rechercher des solutions bien que vous avez déjà trouvé un. Si vous wan't plus de solutions, alors vous devriez devez omettre la déclaration'return'.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top