【问题标题】:"must be an array type but is resolved to char" Tic Tac Toe Program Error“必须是数组类型,但解析为字符”井字游戏程序错误
【发布时间】:2015-01-14 18:32:58
【问题描述】:

所以,我正在根据提供给我的说明创建一个井字游戏程序。看起来大部分代码都是完整的,除了编译时出现异常错误。

在所有以“placeHolder”开头的行上编译时“需要数组,但找到了字符”

例如:-placeHolder[1][0] = 'X';

谁能帮忙?

import java.awt.Color;
import java.util.Scanner;


public class TurtleTicTacToe {
private static char[] placeHolder = new char[9];
private static Scanner scanner = new Scanner(System.in);


public static void main(String[] args) 
{ 
World w = new World();
Turtle t = new Turtle(w);
drawTicTacToeboard(t);

for (int i = 0; i < 9; i++)
{
  placeHolder[i] = ' ';
}


int goesFirst = (int) (Math.random()*2);
if (goesFirst == 0)
{
  int computerPick = (int) (Math.random()*9);
  while (placeHolder[computerPick] != ' ')
  {
    computerPick = (int) (Math.random()*9);
  }
  drawOat(t, computerPick);
}
else
{
  for (int i = 0; i < 3; i++)
  {
    for (int j = 0; j < 3; j++)
    {
      if (placeHolder[i] == ' ')

      System.out.println("Pick a spot on the tic-tac-toe board between 0-8: ");
      int pick = scanner.nextInt();

      drawXat(t, pick);
    }
  }
}

}

public static void drawTicTacToeboard(Turtle t)
{
t.setPenWidth(4);
t.setPenColor(Color.black);
t.penUp();
t.moveTo(80, 180);
t.penDown();
t.setHeading(90);
t.forward(480);
t.penUp();
t.moveTo(80, 300);
t.penDown();
t.forward(480);
t.penUp();
t.moveTo(240, 60);
t.setHeading(180);
t.penDown();
t.forward(360);
t.penUp();
t.moveTo(400, 60);
t.penDown();
t.forward(360);
}

public static void drawXat(Turtle t, int pick)
{
int x = 0;
int y = 0;

if (pick == 1)
{
 x = 160;
  placeHolder[1][0] = 'X';
}

else if (pick == 2)
{
  x = 320;
  placeHolder[2][0] = 'X';
}

else if (pick == 3)
{
  y = 120;
  placeHolder[0][1] = 'X';
}

else if (pick == 4)
{
  x = 160;
  y = 120;
  placeHolder[1][1] = 'X';
}

else if (pick == 5)
{
  x = 320;
  y = 120;
  placeHolder[2][1] = 'X';
}

else if (pick == 6)
{
  y = 240;
  placeHolder[0][2] = 'X';
}

else if (pick == 7)
{
  x = 160;
  y = 240;
  placeHolder[1][2] = 'X';
}

else if (pick == 8)
{
  x = 320;
  y = 240;
  placeHolder[2][2] = 'X';
}

else
{
  placeHolder[0][0] = 'X';
}

    t.setPenWidth(2);
    t.setPenColor(Color.blue);
    t.penUp();
    t.moveTo(90+x, 70+y);
    t.penDown();
    t.moveTo(230+x, 170+y);
    t.penUp();
    t.moveTo(90+x, 170+y);
    t.penDown();
    t.moveTo(230+x, 70+y);
}

public static void drawOat(Turtle t, int AI)
{
int x = 0;
int y = 0;

if (AI == 1)
{
  x = 160;
  placeHolder[1][0] = 'O';
}

else if (AI == 2)
{
  x = 320;
  placeHolder[2][0] = 'O';
}

else if (AI == 3)
{
  y = 120;
  placeHolder[0][1] = 'O';
}

else if (AI == 4)
{
  x = 160;
  y = 120;
  placeHolder[1][1] = 'O';
}

else if (AI == 5)
{
  x = 320;
  y = 120;
  placeHolder[2][1] = 'O';
}

else if (AI == 6)
{
  y = 240;
  placeHolder[0][2] = 'O';
}

else if (AI == 7)
{
  x = 160;
  y = 240;
  placeHolder[1][2] = 'O';
}

else if (AI == 8)
{
  x = 320;
  y = 240;
  placeHolder[2][2] = 'O';
}

else 
{
  placeHolder[0][0] = 'O';
}

t.setPenWidth(2);
t.setPenColor(Color.red);
t.penUp();
t.moveTo(90+x, 100+y);
t.setHeading(180);
t.penDown();
t.forward(40);
t.moveTo(140+x, 170+y);
t.setHeading(90);
t.forward(40);
t.moveTo(230+x, 140+y);
t.setHeading(0);
t.forward(40);
t.moveTo(180+x, 70+y);
t.setHeading(270);
t.forward(40);
t.moveTo(90+x, 100+y);
}
}

【问题讨论】:

  • 您认为placeHolder[1][0] 是什么意思?那不是二维数组。
  • 我以为你就是这样写二维数组的,myArray[i][j] = 0;
  • 你认为我们会如何纠正它?
  • 这就是您使用二维数组的方式,但只有当您实际使用的东西二维数组时才有效。

标签: java arrays casting char


【解决方案1】:

如果要将其用作一个,则需要制作 placeHolder 二维数组。

private static char[][] placeHolder = new char[9][];

【讨论】:

  • 我应该对代码进行哪些更改,以便用户输入值后计算机可以在网格上生成“0”
  • 现在用户值显示在网格上,但不是计算机选择的值。
【解决方案2】:

您使用placeHolder[1][0] 作为二维数组但您将其声明为一维数组private static char[] placeHolder = new char[9];

将其声明为二维数组: private static char[][] placeHolder = new char[9];

还有变化

for (int i = 0; i < 9; i++)
{
    placeHolder[i] = ' ';
}

  for (int i = 0; i < 3; i++)
  {
     for (int j = 0; j < 3; j++)
     {
           if (placeHolder[i][j] == ' ')
     } 
  }

还有变化

if (placeHolder[i] == ' ') to if (placeHolder[i][j] == ' ')

【讨论】:

  • 你的救星!!!!谢啦。一切都会编译,我作为用户可以在交互窗格中输入一个数字,它会显示在井字网格上,问题是计算机不会生成对每个动作的响应。我该怎么处理code while (placeHolder[computerPick] != ' ') code 也许这就是问题所在??
  • @mat 我认为,在调用 drawXat(t, pick); 之前,您没有检查 pick 是否为空;取而代之的是,您首先要检查单元格是否为空,然后再从用户那里获取输入,即选择。 IMO您首先输入然后检查它是否为空,如果它为空则转到drawXat(t,pick)否则再次输入。
  • 好的,我想我明白你在说什么。我做了你刚才说的事情,但它对我不起作用。你能添加一个像上面那样的新帖子,然后准确地发布你所说的吗???谢谢
【解决方案3】:

问题是您在将 placeHolder 用作二维数组时将其声明为一维数组

【讨论】:

    【解决方案4】:

    您使用的全局变量 placeHolder 应该用作 [9] 1D 数组或 [3][3] 2D 数组,而不是两者。

    编辑:-

    import java.awt.Color;
    import java.util.Scanner;
    
    
    public class TurtleTicTacToe {
    private static char[][] placeHolder = new char[3][3];
    private static Scanner scanner = new Scanner(System.in);
    
    
    public static void main(String[] args) 
    { 
    World w = new World();
    Turtle t = new Turtle(w);
    drawTicTacToeboard(t);
    
    for (int i = 0; i < 3; i++)
    {
      for(int j=0; j<3; j++)
      placeHolder[i][j] = ' ';
    }
    
    
    int goesFirst = (int) (Math.random()*2);
    if (goesFirst == 0)
    {
      int computerPick = (int) (Math.random()*9);
      while (placeHolder[computerPick/3][computerPick%3] != ' ')
      {
        computerPick = (int) (Math.random()*9);
      }
      drawOat(t, computerPick);
    }
    else
    {
      for (int i = 0; i < 3; i++)
      {
        for (int j = 0; j < 3; j++)
        {
          if (placeHolder[i][j] == ' ')
    
          System.out.println("Pick a spot on the tic-tac-toe board between 0-8: ");
          int pick = scanner.nextInt();
    
          drawXat(t, pick);
        }
      }
    }
    
    }
    
    public static void drawTicTacToeboard(Turtle t)
    {
        t.setPenWidth(4);
        t.setPenColor(Color.black);
        t.penUp();
        t.moveTo(80, 180);
        t.penDown();
        t.setHeading(90);
        t.forward(480);
        t.penUp();
        t.moveTo(80, 300);
        t.penDown();
        t.forward(480);
        t.penUp();
        t.moveTo(240, 60);
        t.setHeading(180);
        t.penDown();
        t.forward(360);
        t.penUp();
        t.moveTo(400, 60);
        t.penDown();
        t.forward(360);
    }
    
    public static void drawXat(Turtle t, int pick)
    {
    int x = 0;
    int y = 0;
    
    if (pick == 1)
    {
     x = 160;
      placeHolder[1][0] = 'X';
    }
    
    else if (pick == 2)
    {
      x = 320;
      placeHolder[2][0] = 'X';
    }
    
    else if (pick == 3)
    {
      y = 120;
      placeHolder[0][1] = 'X';
    }
    
    else if (pick == 4)
    {
      x = 160;
      y = 120;
      placeHolder[1][1] = 'X';
    }
    
    else if (pick == 5)
    {
      x = 320;
      y = 120;
      placeHolder[2][1] = 'X';
    }
    
    else if (pick == 6)
    {
      y = 240;
      placeHolder[0][2] = 'X';
    }
    
    else if (pick == 7)
    {
      x = 160;
      y = 240;
      placeHolder[1][2] = 'X';
    }
    
    else if (pick == 8)
    {
      x = 320;
      y = 240;
      placeHolder[2][2] = 'X';
    }
    
    else
    {
      placeHolder[0][0] = 'X';
    }
    
        t.setPenWidth(2);
        t.setPenColor(Color.blue);
        t.penUp();
        t.moveTo(90+x, 70+y);
        t.penDown();
        t.moveTo(230+x, 170+y);
        t.penUp();
        t.moveTo(90+x, 170+y);
        t.penDown();
        t.moveTo(230+x, 70+y);
    }
    
    public static void drawOat(Turtle t, int AI)
    {
    int x = 0;
    int y = 0;
    
    if (AI == 1)
    {
      x = 160;
      placeHolder[1][0] = 'O';
    }
    
    else if (AI == 2)
    {
      x = 320;
      placeHolder[2][0] = 'O';
    }
    
    else if (AI == 3)
    {
      y = 120;
      placeHolder[0][1] = 'O';
    }
    
    else if (AI == 4)
    {
      x = 160;
      y = 120;
      placeHolder[1][1] = 'O';
    }
    
    else if (AI == 5)
    {
      x = 320;
      y = 120;
      placeHolder[2][1] = 'O';
    }
    
    else if (AI == 6)
    {
      y = 240;
      placeHolder[0][2] = 'O';
    }
    
    else if (AI == 7)
    {
      x = 160;
      y = 240;
      placeHolder[1][2] = 'O';
    }
    
    else if (AI == 8)
    {
      x = 320;
      y = 240;
      placeHolder[2][2] = 'O';
    }
    
    else 
    {
      placeHolder[0][0] = 'O';
    }
    
    t.setPenWidth(2);
    t.setPenColor(Color.red);
    t.penUp();
    t.moveTo(90+x, 100+y);
    t.setHeading(180);
    t.penDown();
    t.forward(40);
    t.moveTo(140+x, 170+y);
    t.setHeading(90);
    t.forward(40);
    t.moveTo(230+x, 140+y);
    t.setHeading(0);
    t.forward(40);
    t.moveTo(180+x, 70+y);
    t.setHeading(270);
    t.forward(40);
    t.moveTo(90+x, 100+y);
    }
    }`
    

    【讨论】:

    • 这个代码除了一个大问题外都可以工作,计算机不做第一个动作和后面的动作。只有 USER ENTERED 值出现在网格上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2020-03-23
    • 2023-03-16
    相关资源
    最近更新 更多