Почему мой генератор случайных чисел становится неиспользуемым назначением при использовании его для ввода значений для 2d-массива?

#java #arrays #multidimensional-array #random #netbeans

#java #массивы #многомерный массив #Случайный #netbeans

Вопрос:

Я делал базовую игру в battleship, и чтобы заставить процессор выбирать местоположения кораблей в 2d-массиве, я создаю два генератора случайных чисел для выбора значений от 1 до 8 отдельным методом. По какой-то причине генераторы случайных чисел отображаются как неиспользуемые, и я не знаю почему. пока это то, что у меня есть. Если кто-нибудь знает, что я делаю неправильно, пожалуйста, дайте мне знать.

 //calls method
board3 = CPUship(board3);
//displays result of method
for (int i = 0; i < board3.length; i  ) {
    for (int j = 0; j < board3.length; j  ) {
        System.out.print(board3[i][j]);
    }
    System.out.println("");
}
  
 public static String[][] CPUship(String[][] board3) {
    int rowGenerate;
    int colGenerate;
    boolean valid2 = false;
    for (int CPUships = 0; CPUships < 6; CPUships  ) {
        while (!valid2) {
            rowGenerate = (int) (9 * Math.random()   0);
            colGenerate = (int) (9 * Math.random()   0);
            if (!board3[rowGenerate][colGenerate].equalsIgnoreCase("#")) {
                board3[rowGenerate][colGenerate] = "#";
                valid2 = true;
            }
        }
        valid2 = false;
    }
    return board3;
}
  

Комментарии:

1. Я скопировал ваш код, моя IDE (Eclipse) сообщает мне, что используется все, кроме «valid2». Что именно не используется, … что вы подразумеваете под «генераторами случайных чисел».

2. Я использую строки с «rowGenerated» и «colGenerated» в качестве случайных генераторов в операторе while, но при (int) ( 9 * Math.random() 0) он отображается как неиспользуемая переменная

3. какую IDE вы используете (Eclipse, IntelliJ, …)?

4. while (valid2=false){ не может работать… просто используйте while(!valid2) … для сравнения значений используйте <= >= == != … или «.equals(xy)»

5. Я использую netbeans

Ответ №1:

Здесь должен быть полный код

 public static String[][] CPUship(String[][]board3){
    int rowGenerate;
    int colGenerate;
    
    for (int CPUships = 0; CPUships < 6; CPUships  ) {
        boolean valid2=false;
        while (!valid2){ //instead of valid = false "
            rowGenerate = (int) ( 9* Math.random()   0);
            colGenerate = (int) ( 9* Math.random()   0);
            if (!board3[rowGenerate][colGenerate].equalsIgnoreCase ("#")){
                board3[rowGenerate][colGenerate]="#";
                valid2=true;
            }
            //removed the valid2=false, it does not "reset" automatically
            //removed the CPUships   ... already done by the for loop 
        }
    }
    return board3;
}
  

или используйте break вместо допустимого логического

 public static String[][] CPUship(String[][]board3){
    int rowGenerate;
    int colGenerate;
    
    for (int CPUships = 0; CPUships < 6; CPUships  ) {
        while (true){ //instead of valid = false "
            rowGenerate = (int) ( 9* Math.random()   0);
            colGenerate = (int) ( 9* Math.random()   0);
            if (!board3[rowGenerate][colGenerate].equalsIgnoreCase ("#")){
                board3[rowGenerate][colGenerate]="#";
                break;
            }
            //removed the valid2=false, it does not "reset" automatically
            //removed the CPUships   ... already done by the for loop 
        }
    }
    return board3;
}
  

Комментарии:

1. это работает, но поскольку логическое значение valid2 становится истинным после одной допустимой записи, оно не будет повторяться более одного раза, также отображается ошибка «отсутствует javadoc» для последней строки

2. @Vardig25 Я переместил valid2 в цикл for и добавил второе решение.

3. Спасибо за всю помощь, я думаю, у меня получилось!