我需要知道为什么我的计数器变量是循环的

时间:2015-04-25 07:35:15

标签: java

所以我有一个接收String [] []和String(word)的方法。该方法必须从2dArray中查找单词,并且应该在同一行中显示其他单词之一。此外,我需要忽略(不显示)和计数(++)同一行中的空白点。我想知道为什么我的计数器是循环的,它不会让我忽略那些空格。

public static void main(String[] args) {

    String[][] array2d = {{"joe", "slim", "ed", "george"},
                          {"soto", "", "", "" },
                          {"billy", "sanchez", "carlos", "fernando"}};

    sort(array2d, "soto");
}

public static void sort(String[][] matrix, String word) {
    int counterForArrayLength = 0;
    boolean random = true;
    boolean exit = true;
    String optionFromUser = "";
    do {
        random = true;
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                if (matrix[i][j].equals(word)) {
                    for (int k = 0; k < matrix[0].length; k++) {
                        while (random) {
                            String randomWord = matrix[i][(int) (Math.random() * matrix[0].length)];
                            String testRandom = "" + randomWord;

                            if (randomWord.equals(word)) {
                                random = true;
                            } else {
                                if (randomWord.equals("")) {
                                    counterForArrayLength++;
                                    System.out.println("" + counterForArrayLength);
                                } else {
                                    JOptionPane.showMessageDialog(null, randomWord);
                                    optionFromUser = JOptionPane.showInputDialog("Desea obtener otro sinonimo? si/no  \n Digite salir si asi lo desea.");
                                    optionFromUser = optionFromUser.toLowerCase();
                                    if (optionFromUser.equals("si") || optionFromUser.equals("s")) {
                                        random = true;
                                    } else {
                                        random = false;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        if (optionFromUser.equals("salir")) {
            exit = false;
        } else {
            word = JOptionPane.showInputDialog("Digite otra palabra");
        }
    } while (exit);
}

运行:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

1 个答案:

答案 0 :(得分:0)

您的代码示例缺少基本信息。但是,内部循环:

while(random)
{
   // . . .
}

可以永远运行,因为您不保证将随机变量设置为false。 如果您使用不属于该数组的单词调用该方法,它将仅 。 此外,如果你用word = "soto"调用它,那么机会是100%,永远不会离开循环,因为在4个单词中你找到了一个,其他3个是空的。