Java 错误:与2D数组和.split不兼容的类型

Java 错误:与2D数组和.split不兼容的类型,java,multidimensional-array,incomplete-type,Java,Multidimensional Array,Incomplete Type,昨天问同样的问题,但今天在不同的情况下可以做同样的事情 single[z][i] = (board[i].split("?!^")); 这一行给了我一个错误:需要不兼容的类型:String 找到:字符串[] 1错误 我知道这是因为它是一个2D数组,split提供了自己的字符串输出,但不知道如何修复。 以下是我的全部代码: public static void main(String[] args) { Scanner in = new Scanner(System.in);

昨天问同样的问题,但今天在不同的情况下可以做同样的事情

single[z][i] = (board[i].split("?!^"));  
这一行给了我一个错误:需要不兼容的类型:String 找到:字符串[] 1错误 我知道这是因为它是一个2D数组,split提供了自己的字符串输出,但不知道如何修复。 以下是我的全部代码:

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int player;
    String board[] = new String[8];
    String single [] [] = new String [8] [8];

    //single[0][0] = "hi";

    //If player is 1, I'm the first player.
    //If player is 2, I'm the second player.
    player = in.nextInt();

    //Read the board now. The board is a 8x8 array filled with 1 or 0.

      for(int i = 0; i < 8; i++) {
          if(in.hasNext()){
              board[i]= in.next();

         }
      }
  for(int z = 0; z < 8; z++){
       for(int i = 0; i < 8; i++) {
           single[z][i] = (board[i].split("?!^"));   

    }
  }for(int z = 0; z < 7; z++)
       for(int i = 0; i < 7; i++) {
           if((single[z][i].equals(1)) && (single[z][i+1].equals(1)) &&(single[z+1][i].equals(1))){
               System.out.print(z + ""+ i);
           }
       }


    nextMove(player,board);

   }

   }
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
国际球员;
线板[]=新线[8];
单个字符串[][]=新字符串[8][8];
//单[0][0]=“hi”;
//如果玩家是1,我是第一个玩家。
//如果玩家是2,我是第二个玩家。
player=in.nextInt();
//现在阅读电路板。电路板是一个8x8阵列,填充1或0。
对于(int i=0;i<8;i++){
if(在.hasNext()中){
board[i]=in.next();
}
}
对于(intz=0;z<8;z++){
对于(int i=0;i<8;i++){
单[z][i]=(板[i]。拆分(“?!^”);
}
}对于(intz=0;z<7;z++)
对于(int i=0;i<7;i++){
如果((单[z][i].equals(1))&&(单[z][i+1].equals(1))&(单[z+1][i].equals(1))){
系统输出打印(z+“”+i);
}
}
下一个移动(玩家、棋盘);
}
}

假设
拆分
预计将返回一个表示所需8个元素的
字符串数组
s,则应仅在外部循环中执行
拆分
s,然后在内部循环或数组复制方法中迭代
拆分
的结果:

for(int z = 0; z < 8; z++){
    String[] tokens = board[z].split("?!^");
    // Should have at least 8 tokens here.
    // Copy the first 8 into single[z]
    single[z] = new String[8];
    System.arraycopy(tokens, 0, single[z], 0, 8);
}

您甚至没有解释代码的意图。我们可以通过阅读来猜测,但这很无聊。您必须使您的问题易于阅读。很抱歉,我正在尝试确定游戏
String的网格上1的坐标。split()
返回
字符串[]
;您正在尝试将其分配给
字符串
。谢谢。您能解释一下这是如何工作的,以及我将如何在我的代码中实现它吗?我试过了,我想我做到了wrong@JTattack要获得2D 8x8字符串数组,需要将8个字符串拆分为8个片段。该循环用于第一维度;内部循环被
arraycopy
替换,如果您知道
split
的结果正好有8个项目,您可以进一步简化它(请参见编辑)。好的,谢谢,这是可行的,但是我需要i和z bc,这是图形的行和列部分,所以我需要这两个,但它会给我不兼容的部分。希望这能让你sence@JTattack
split(“?!^”)
已经返回了一个1D数组,因此
i
维度已经存在,在拆分时您不需要对其进行任何操作。在这一个循环之后添加一对嵌套循环,并打印您用
z
i
获得的元素,以查看发生了什么。我可以这样做,但我需要在手之前保存所有的点。如果我在循环完成后这样做,数据会被忘记吗?
for(int z = 0; z < 8; z++){
    single[z] = board[z].split("?!^");
}
for(int z = 0; z < 8; z++){
    for(int i = 0 ; i < 8 ; i++) {
        System.out.print("single["+z+"]["+i+"]=");
        System.out.print(single[z][i]);
    }
}