#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. Спасибо за всю помощь, я думаю, у меня получилось!