我正在为用户和计算机之间的战舰游戏编写代码,首先我要求用户放置他们的船只和地点。手榴弹(每个需要1个点)&在同一地点不能有2艘船或2枚手榴弹。
如何编写验证阵列位置是否已被“占用”的代码,以及是否要求用户重试。
我试着写:但显然我做不到!null。所以,我不知道该写什么
public void gridverification(String[][] grid){
for(int i =0; i<grid.length; i++){
for(int j = 0; j<grid.length; i++){
if(grid[i][j] == !null){
}
}
}
如果它令人困惑,我很抱歉(显示的代码在我的战舰类中,其余的代码都在驱动程序中。
编辑:我已经纠正了这个问题,但无论用户输入什么内容,都会不断显示消息。
这是我的驱动程序代码:
for(int i = 0; i&lt; 6; i ++){
System.out.print("Enter the coordinate of your ship #"+(i+1)+":");
answer = keyboard.next();
verify.gridverification(gridfinal);
precolumn = answer.charAt(0);
column = letter.convert(precolumn);
prerow = Character.digit(answer.charAt(1), 10);
row = number.convertnum(prerow);
gridfinal[column][row] = " s ";
}
以下是我所做的验证方法:
public void gridverification(String [] [] grid){
if (grid != null && grid.length > 0)
{
for (int i = 0; i < grid.length; i++)
{
for (int j = 0; j < grid.length; j++)
{
if (grid[i][j] != null)
{
System.out.println("Sorry, coordinates already used. Try again.");
}
}
}
}
答案 0 :(得分:0)
你的逻辑无序。将其写为if(grid[i][j] != null)
。通过这种方式,您可以看到该位置的网格是否不等于为空。
答案 1 :(得分:0)
你应该检查给定的网格数组和[i] [j]处的实际元素。您还可以检查元素的大小,如public void gridverification(String[][] grid) {
if (grid != null && grid.length > 0) {
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid.length; i++) {
if (grid[i][j] != null) {
// do something
}
}
}
}
}
StringUtils.isEmpty
或者,如果您正在处理一个大型项目,您经常需要检查字符串变量为null及其大小,那么您应该使用StringUtils.isNotBlank
或commons-lang-2-6.jar
作为依赖项添加{{1}}你项目中的jar。
答案 2 :(得分:0)
您似乎正在尝试检查用户是否已将船舶放置在他们输入的位置。您当前的代码不会这样做。它查看整个数组并检查每个位置是否为空。如果他们已经进入船舶,它会找到并说他们需要再试一次。您可以做什么检查他们输入的位置。所以你可以做类似以下的事情:
public String[][] populateWithShips(String[][] grid){
int shipCount = 6;
for (int shipIndex = 0; shipIndex < shipCount; shipIndex++) {
boolean shipExists = false;
while(shipExists != true){//Another way you could do this is (!shipExists)
System.out.println("Please enter the column number for ship number " + shipIndex + :");
int column = Integer.parseInt(this.keyboard.next());//This will take the input String and parse it to a Integer object
System.out.println("Please enter the row number for ship number " + shipIndex + :");
int row = Integer.parseInt(this.keyboard.next());
//Note I haven't verified that this inputs are correct, just assuming they user enter good inputs
if(grid[column][row] != null){
System.out.println("Sorry, coordinates already used. Try again.\n");
}
else{
grid[column][row] = " s ";
shipExists = true;
}
}
}
return grid;
}
请注意grid[row][column]
更准确,但只要您保持一致而不是无关紧要。
此外,这似乎可能是家庭作业的一部分,所以我建议你阅读Open letter to students with homework problems。我还建议您使用调试器并写出您要实现的步骤。这将有助于您更清楚地了解自己在做什么,并更容易发现错误。