0

これはコードです:

public class test2 {
    /**
     * @param args
     * @throws InterruptedException 
     */
    public static void main(String[] args) throws InterruptedException {
        int[][] arrayOfInts = { 
                { 32, 87, 3, 589 },
                { 622, 1076, 2000, 8 },
                { 12, 127, 77, 955 },
                {12, 3}
        };
        int searchfor = 12;

        int i;
        int j = 0;
        boolean foundIt = false;

        search:
            for (i = 0; i < arrayOfInts.length; i++) {
                for (j = 0; j < arrayOfInts[i].length;
                        j++) {
                    if (arrayOfInts[i][j] == searchfor) {
                        foundIt = true;
                        break search;
                    }
                }
            }

        if (foundIt) {
            System.out.println("Found " + searchfor +
                    " at " + i + ", " + j);
        } else {
            System.out.println(searchfor +
                    " not in the array");
        }
    }
}

このコードは最初の 12 で停止します。ご覧のとおり、配列 3 には別の 12 があります。どうすればそれを続行し、2 番目の 12 も検索できますか? 最初の 12 で終了させたくありません。ありがとうございます。

4

5 に答える 5

0

次の方法でコードを変更します

   public static void main(String[] args) throws InterruptedException {
        int[][] arrayOfInts = { 
                { 32, 87, 3, 589 },
                { 622, 1076, 2000, 8 },
                { 12, 127, 77, 955 },
                {12, 3}
            };
            int searchfor = 12;

            int i;
            int j = 0;
            boolean foundIt = false;
            int foundItIndexI = null;
            int foundItIndexJ = null;

            for (i = 0; i < arrayOfInts.length; i++) {
                for (j = 0; j < arrayOfInts[i].length;
                     j++) {
                    if (arrayOfInts[i][j] == searchfor) {
                        foundIt = true;
                        foundItIndexI = i;
                        foundItIndexJ = j;

                    }
                }
            }

            if (foundIt) {
                System.out.println("Found " + searchfor +
                                   " at " + foundItIndexI + ", " + foundItIndexJ);
            } else {
                System.out.println(searchfor +
                                   " not in the array");
            }
    }
于 2012-07-17T14:05:33.983 に答える
0

これにより、見つかったすべての座標が追跡されます。

     int[][] arrayOfInts = { 
             { 32, 87, 3, 589 },
             { 622, 1076, 2000, 8 },
             { 12, 127, 77, 955 },
             {12, 3}
         };
         int searchfor = 12;

         int i;
         int j = 0;


         // this is dumb way to keep track of coordinates, but prob
         // not important to have better implementation (eg. Coordinate object)
         List<String> foundCoordinates = new ArrayList<String>();

     search:
         for (i = 0; i < arrayOfInts.length; i++) {
             for (j = 0; j < arrayOfInts[i].length;
                  j++) {
                 if (arrayOfInts[i][j] == searchfor) {
                     foundCoordinates.add(i + ", " + j);
                     continue search;
                 }
             }
         }

         if (foundCoordinates.size() > 0) {
             System.out.println("Found " + searchfor +
                                " at:" );

             for(String s : foundCoordinates)
             {
                 System.out.println(s);
             }
         } else {
             System.out.println(searchfor +
                                " not in the array");
         }
于 2012-07-17T14:06:03.513 に答える
0

search検索している番号に初めてヒットしたときに ラベル付けされたループから抜け出しています。

あなたが達成したいことを私が正しく推測している場合、これが私がそれを行う方法です

boolean foundIt = false;

for (int i = 0; i < arrayOfInts.length; i++) {
    for (int j = 0; i < arrayOfInts.length; j++) {
        if (arrayOfInts[i][j] == searchFor) {
            foundIt = true;
            System.out.println("Found " + searchFor + " at [" + i + ", " + j + "].");
        }
    }
}

if (foundIt == false) {
    System.out.println("Haven't found " + searchFor + ".");
}

それらを見つけた位置を覚えておきたい場合は、そのjava.awt.Pointために独自のクラスを使用するか、書くことができます。

コードは次のようになります。

boolean foundIt = false;
List<Point> points = new ArrayList<Point>();

for (int i = 0; i < arrayOfInts.length; i++) {
    for (int j = 0; i < arrayOfInts.length; j++) {
        if (arrayOfInts[i][j] == searchFor) {
            foundIt = true;
            points.add(new Point(j, i));
            System.out.println("Found " + searchFor + " at [" + i + ", " + j + "].");
        }
    }
}

if (foundIt == false) {
    System.out.println("Haven't found " + searchFor + ".");
}
于 2012-07-17T14:06:20.757 に答える
0

break search;使用する代わりにcontinue search;。を使用している場合、現在の繰り返しのみを中断してループを継続breakしながら、ループ全体を中断します。continue

于 2012-07-17T14:01:17.187 に答える
0

searchFor が見つかったすべての位置を見つけようとしていると仮定しています。これは方法の 1 つです。このコードはラベルを使用しません。これにより、searchFor が見つかったすべての位置が出力されます。

public static void main(String[] args) throws InterruptedException {
        int[][] arrayOfInts = { { 32, 87, 3, 589 }, 
                                { 622, 1076, 2000, 8 }, 
                                { 12, 127, 77, 955 }, 
                                { 12, 3 } };
        int searchfor = 12;

        int i;
        int j = 0;
        boolean foundIt = false;
        for (i = 0; i < arrayOfInts.length; i++) {
            foundIt = false;
            for (j = 0; j < arrayOfInts[i].length; j++) {
                if (arrayOfInts[i][j] == searchfor) {
                    foundIt = true;
                    continue;
                }
            }
            if (foundIt) {
                    System.out.println("Found " + searchfor + " at " + i + ", " + j);
            }
            else {
                System.out.println(searchfor + " not in the array "+i);
            }
        }

    }
于 2012-07-17T14:33:16.983 に答える