Проблема с подсчетом затонувших кораблей/кораблей линкора (Java)JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с подсчетом затонувших кораблей/кораблей линкора (Java)

Сообщение Anonymous »

Итак, я создаю метод для игры с линкорами, которая состоит из кораблей размером от 2 до 5 квадратов по горизонтали на сетке 10x10 на Java. Этот метод заключается в подсчете количества затонувших кораблей в сетке, которые отмечены знаком «*», корабль будет отмечен знаком «S» и водой «.». Я разработал этот метод, но продолжаю сталкиваться с проблемой при правильном подсчете количества затонувших кораблей, поскольку он либо считает затонувшие корабли с одной звездой (которые не являются допустимыми кораблями) подряд как затонувшие корабли, но недавно я столкнулся с проблема, заключающаяся в том, что все отдельные звезды считаются затонувшими кораблями. Как вы можете видеть на доске ниже, предполагается, что он возвращает 1 корабль, поскольку это единственный действительный корабль на доске, но когда я запускаю этот метод, он возвращает 4. Это также проблема, возникающая позже в методе подсчета количества кораблей, которых нет на доске/сетке.
Вот доска/сетка:

Код: Выделить всё

 static char[][] board = {
{'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
{'.', '.', 'S', '.', '.', '*', '*', '.', '.', '.'},
{'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
{'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
{'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
{'.', '.', '.', '.', '.', '*', '.', '.', '.', '.'},
{'.', '.', '.', '.', '.', '*', '.', '.', '.', '.'},
{'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
{'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
{'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'}
};

Код: Выделить всё

public static int sunkenShips(char boardArray[][]) {
board = boardArray;
int sunkenShips = 0; //counts the amount of sunken ships
boolean sunken = false; //used later to check if the the space is a sunken ship
for(char[] row : boardArray) { //loops through board array
for(int i = 0; i < row.length; i++) { //loops through each row
if(row[i] == '*') { //checks if current element is a sunken ship
sunken = true; //sets it to true then
int ii = 0; //resets so it can check if it is a one star (not a sunken ship) in each row
for(int j = i; j < row.length && j < i + 5; j++) { //if it is sunken it checks whether its a valid sunken ship (2-5 squares long), it will go on until the 5th square and/or until the end of the row
ii++;
if(row[j] != '*' && ii == 1) { //checks if the next square after the one is was on is a * and if not which would make it only 1 star and not a sunken ship, break out of the loop
sunken = false; //changes it to false therefore
break;
}
}
if(sunken == true) { //if the ship is sunken then increments to the sunken ship variable
sunkenShips++;
}
}
}
}
if (validBoard(boardArray) == 12 && sunken == true) { //checks if board is valid using other method and if board has sunken ships
return sunkenShips;
}
else if (validBoard(boardArray)==12) {
for(char[] row: boardArray) {
for(int i = 0; i < row.length; i++) { //goes through the array to check if there aren't any ships
if (row[i] == 'S') { //checks if there is a ship
boolean validShip = true; //used to checking if its a valid ship (2-5 squares in length)
int iii = 0; //resets so it can check if it is a one S (not a ship) in each row
for(int j = i; j < row.length && j < i + 5; j++) { // same logic as above
iii++;
if(row[j] != 'S' && iii == 1) { //same logic as above to check if its a ship
validShip = false;
break;
} else {
validShip = true;
}
}
if (validShip == false) { // if there aren't ships it should return this value
return 0;
}
}
}
}
}
return 2; //default return value
}
Я попробовал много настроек: эта часть кода перебирает следующие 4 пробела, чтобы проверить, является ли это действительным боевым кораблем, и оператор проверки if, чтобы проверить, является ли он действительным или нет ( минимум 2 пробела). Но каждый раз он либо не выполняет оператор if, либо в последнее время неправильно выполняет цикл for.

Код: Выделить всё

for(int j = i; j < row.length && j < i + 5; j++) { //if it is sunken it checks whether its a valid sunken ship (2-5 squares long), it will go on until the 5th square and/or until the end of the row
ii++;
if(row[j] != '*' && ii == 1) { //checks if the next square after the one is was on is a * and if not which would make it only 1 star and not a sunken ship, break out of the loop
sunken = false; //changes it to false therefore
break;
}
}
Вот вопрос по этому методу для всех, кому интересно:

Код: Выделить всё

Write a method that when given a valid board (see above – assume the input board is valid) returns the number of sunk ships. If there are no ships on the board (this is still a valid board) a value should be returned.


Подробнее здесь: https://stackoverflow.com/questions/783 ... ships-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как рандомизировать позиции кораблей в игре Battleships? (Ява)
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как рандомизировать позиции кораблей в игре Battleships?
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как рандомизировать позиции кораблей в игре Battleships?
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как я могу хранить объекты Swift/Objective-C с автоматическим подсчетом ссылок на карте C++, не вызывая утечек памяти пр
    Гость » » в форуме C++
    0 Ответы
    29 Просмотры
    Последнее сообщение Гость
  • Как я могу хранить объекты Swift/Objective-C с автоматическим подсчетом ссылок на карте C++, не вызывая утечек памяти пр
    Anonymous » » в форуме C++
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»