0

私の割り当てでは、次のように指示しています
。Search2:x * x + y * y-12x -10y + 36 =0の解を検索します。xとyの両方で0から10まで検索し、すべてのy値を検索してからに移動します。次のx。見つかった最初の3つの解決策を印刷します。(注-ここではラベル付きのブレークが便利です!)

このための論理を理解することはできません。2つ以上のループを使用する必要があると思いますが、よくわかりません。
これは私がこれまでに持っているものです(それは(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 + ")");  
        }  
    }  
}  

更新
これが解決策です:

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

7 に答える 7

2

悪い試みではありません。あなたは非常に近いので、実用的な解決策を紹介します. 基本的に、次の 3 つのことを行う必要があります。

  1. whileに変更if
  2. 変数を使用して解決策を見つけた回数をカウントし、3 回で停止できるようにします。
  3. ラベルを追加して、内側のループ内から外側のループを抜け出せるようにします

また、わかりやすくするために、問題xと同じ変数名を使用することをお勧めします。y

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

このコードを実行すると、次のものが生成されます。

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

おおざっぱで申し訳ありませんが、ここでのレッスンの一部は、優れたコーディング スタイルと実践です。

于 2012-01-11T20:56:02.667 に答える
0

あなたが持っている内側のwhileループをよく見てください。方程式の解が見つかり、変更ijれることはなく、数式は常にに評価さ0れ、無限ループになります。

iわかりやすくするために、名前を変更しjてxとyに変更することも賢明かもしれません。しかし、あなたはほとんど正しい方向に進んでいます。最初の3つのソリューションを印刷するだけでよいことを忘れないでください。

于 2012-01-11T20:49:25.713 に答える
0

これは非常に単純な概念なので、あまり役に立ちませんが、何をループする必要があるかを考えてください。代わりに、iまたはjのxとyの代わりに使用する方が簡単な場合があります。また、印刷のみ(6,0)です。これは、whileループで行うように指示したとおりだからです。

ヒントの1つとして、whileループには、その関数を停止するステートメントが必要です。たとえば、x <4の場合、ループの外側で続行するよりも大きいか=toである場合などです。

于 2012-01-11T20:50:22.483 に答える
0
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;
                    }
                }
            }

        }

    }

}
于 2012-01-11T20:59:22.110 に答える
0

長い間、私はその種の宿題を最後に書きました...それを楽しむためだけに:)

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

}
于 2012-01-11T21:03:25.977 に答える
0

無期限に実行される余分なwhileループを使用しています。

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

これが初めて true と評価されたとき (つまり、(6,0) に達したとき)は、内部で変更されていないiため実行を続けます。j

に置き換える必要がありifます。

于 2012-01-11T20:47:36.527 に答える
-2
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;
      }  
   }  
} 

return;すでに解決策を見つけたとしても、それ以外の場合は解決策を検索するので、その部分を覚えておくことは重要です。これ以上の解決策が必要ない場合は、「return」ステートメントを省略する必要があります。

于 2012-01-11T20:50:24.623 に答える