Java 二维矩形阵列中的变值问题

Java 二维矩形阵列中的变值问题,java,arrays,for-loop,multidimensional-array,Java,Arrays,For Loop,Multidimensional Array,我正在创建一个非常初级的战舰程序,以供娱乐,我 在我的矩形二维数组中遇到了更改值的问题。基本上,在这个二维阵列中有五艘“飞船”。然后,用户输入一个整数,以查看它们是否命中或未命中。我希望输出显示带有猜测数字的数组,对于未命中,用X表示,对于命中,用0表示。当t的值等于0或X时,我无法将区域[I][j]的值更改为0。我是java新手,所以我正在努力学习。任何帮助都将不胜感激。先谢谢你 import java.util.*; public class battleship { //Rudi

我正在创建一个非常初级的战舰程序,以供娱乐,我 在我的矩形二维数组中遇到了更改值的问题。基本上,在这个二维阵列中有五艘“飞船”。然后,用户输入一个整数,以查看它们是否命中或未命中。我希望输出显示带有猜测数字的数组,对于未命中,用
X
表示,对于命中,用
0
表示。当
t
的值等于
0
X
时,我无法将
区域[I][j]
的值更改为
0。我是java新手,所以我正在努力学习。任何帮助都将不胜感激。先谢谢你

import java.util.*;
public class battleship {

    //Rudimentary Battleship game
    public static void main(String[] args) {
        System.out.println(" Hello and welcome to a basic version of Battleship.");
        System.out.println(" The objective of this game is to sink all five ships located on the grid listed below.");
        System.out.println(" Follow the prompt located underneath the grid ");
        final int ROWS = 10;
        final int COLS = 10;
        int sum = 0;
        int [][] area = { {1,2,3,4,5,6,7,8,9,10},
                  {11,12,13,14,15,16,17,18,19,20},
                  {21,22,23,24,25,26,27,28,29,30},
                  {31,32,33,34,35,36,37,38,39,40},
                  {41,42,43,44,45,46,47,48,49,50},
                  {51,52,53,54,55,56,57,58,59,60},
                  {61,62,63,64,65,66,67,68,69,70},
                  {71,72,73,74,75,76,77,78,79,80},
                  {81,82,83,84,85,86,87,88,89,90},
                  {91,92,93,94,95,96,97,98,99,100} };

        for(int i=0; i < area.length; i++) {
            for (int j=0; j < area[i].length; j++) {


              if(area[i][j] < 10) 
                System.out.print("   "+(area[i][j])+" ");  
              else if(area[i][j] < 100) 
                System.out.print("  "+(area[i][j])+" ");
              else 
                System.out.print(" "+(area[i][j])+" ");
            }
          System.out.println("");
        }

    Scanner input = new Scanner(System.in);{
    System.out.println("Enter attack integer:");
    int t;
    while(true){
    t = input.nextInt();

    if ((t == 41) || (t == 42) || (t == 43)){
    System.out.println("Hit - Destroyer");}

    if ((t == 80) || (t == 90) || (t == 100)){
        System.out.println("Hit - Submarine");}


    if((t == 52) || (t == 62) || (t== 72) || (t == 82) || (t == 92)){
        System.out.println ("Hit - Aircraft Carrier");}

    if((t == 15) || (t == 16) || (t == 17) || (t == 18)){
        System.out.println ("Hit - Battleship");}

    if((t == 1) || (t == 2)){
        System.out.println ("Hit - PT Boat");}
    else{
        System.out.println ("Miss");
    }
    System.out.println("You have fired at:" + t);
    int w = 0;
    for(int i=0; i < area.length; i++) {
        for (int j=0; j < area[i].length; j++) {

            if (area[i][j] == t)

          if(area[i][j] < 10) 
            System.out.print("   "+(area[i][j])+" ");  
          else if(area[i][j] < 100) 
            System.out.print("  "+(area[i][j])+" ");
          else 
            System.out.print(" "+(area[i][j])+" ");
        }
      System.out.println("");
    }

        }
        }
    }
} 
import java.util.*;
公共级战舰{
//基本战舰游戏
公共静态void main(字符串[]args){
System.out.println(“您好,欢迎来到战舰的基本版本。”);
这个游戏的目标是击沉下面列出的网格上的所有五艘船;
System.out.println(“遵循位于网格下方的提示”);
最终整数行=10;
最终整数COLS=10;
整数和=0;
int[][]面积={{1,2,3,4,5,6,7,8,9,10},
{11,12,13,14,15,16,17,18,19,20},
{21,22,23,24,25,26,27,28,29,30},
{31,32,33,34,35,36,37,38,39,40},
{41,42,43,44,45,46,47,48,49,50},
{51,52,53,54,55,56,57,58,59,60},
{61,62,63,64,65,66,67,68,69,70},
{71,72,73,74,75,76,77,78,79,80},
{81,82,83,84,85,86,87,88,89,90},
{91,92,93,94,95,96,97,98,99,100} };
对于(int i=0;i
使用面向对象会更好。下面是一个框架,让您开始:

public class Cell {
  private boolean ship = false;
  private boolean hit = false;

  public boolean getHit() {
    return hit;
  }
  public void setHit(boolean hit) {
    this.hit = hit;
  }
}
然后

public class Board(){
公共静态最终整数大小=10;
私人电池[]板;
公共委员会(){
板=新单元[尺寸][尺寸];
对于(int i=0;i<10;i++)
对于(int j=0;j<10;j++)
板[i][j]=新单元();
公共布尔getHit(整数x,整数y){
如果(x<0 | | x>=SIZE | | y<0 | | y>=SIZE)抛出新的战舰异常(“您查询的单元格不存在!”);
返回板[x][y].getHit();
}
//等等。
} 

充实您需要的所有方法,在需要时添加字段,这会更好!

使用面向对象会更好。下面是一个框架,让您开始:

public class Cell {
  private boolean ship = false;
  private boolean hit = false;

  public boolean getHit() {
    return hit;
  }
  public void setHit(boolean hit) {
    this.hit = hit;
  }
}
然后

public class Board(){
公共静态最终整数大小=10;
私人电池[]板;
公共委员会(){
板=新单元[尺寸][尺寸];
对于(int i=0;i<10;i++)
对于(int j=0;j<10;j++)
板[i][j]=新单元();
公共布尔getHit(整数x,整数y){
如果(x<0 | | x>=SIZE | | y<0 | | y>=SIZE)抛出新的战舰异常(“您查询的单元格不存在!”);
返回板[x][y].getHit();
}
//等等。
} 

充实您需要的所有方法,在需要时添加字段,这将更好地工作!

这很简单,修改代码:

if ((t == 41) || (t == 42) || (t == 43)){
    System.out.println("Hit - Destroyer");
    area[i][j] = "X";
}
if ((t == 80) || (t == 90) || (t == 100)){
    System.out.println("Hit - Submarine");
    area[i][j] = "X";
}
if((t == 52) || (t == 62) || (t== 72) || (t == 82) || (t == 92)){
    System.out.println ("Hit - Aircraft Carrier");
    area[i][j] = "X";
}

if((t == 15) || (t == 16) || (t == 17) || (t == 18)){
    System.out.println ("Hit - Battleship");
    area[i][j] = "X";
}
if((t == 1) || (t == 2)){
    System.out.println ("Hit - PT Boat");
    area[i][j] = "X";
}
else{
    System.out.println ("Miss");
    area[i][j] = "O";
}

注意:注意,数组是0索引的,所以你的船的位置与你设置网格的方式不完全一致。例如,区域[4][1]不是“41”。你(在驱逐舰的情况下)似乎对列而不是行做了正确的操作。如果船在区域[4][0],区域[4][1],区域[4][2],if语句应该检查31,32,33。事实上,您最好标记00、01、02、…、97、98、99的位置,以便索引与数字相对应。

这很简单,修改代码:

if ((t == 41) || (t == 42) || (t == 43)){
    System.out.println("Hit - Destroyer");
    area[i][j] = "X";
}
if ((t == 80) || (t == 90) || (t == 100)){
    System.out.println("Hit - Submarine");
    area[i][j] = "X";
}
if((t == 52) || (t == 62) || (t== 72) || (t == 82) || (t == 92)){
    System.out.println ("Hit - Aircraft Carrier");
    area[i][j] = "X";
}

if((t == 15) || (t == 16) || (t == 17) || (t == 18)){
    System.out.println ("Hit - Battleship");
    area[i][j] = "X";
}
if((t == 1) || (t == 2)){
    System.out.println ("Hit - PT Boat");
    area[i][j] = "X";
}
else{
    System.out.println ("Miss");
    area[i][j] = "O";
}

注意:注意,数组是0索引的,所以你的船的位置与你设置网格的方式不完全一致。例如,区域[4][1]不是“41”。你(在驱逐舰的情况下)似乎对列而不是行做了正确的操作。如果船在区域[4][0],区域[4][1],区域[4][2],if语句应该检查31,32,33。事实上,您最好将位置标记为00、01、02、…、97、98、99,以便索引与数字相对应。

要更改[i,j]处的值,只需执行
区域[i][j]=“任意”;
这不是您的问题,但您可以使用两个for循环更好地初始化2D数组“区域”