【问题标题】:error: incompatible types with 2D array and .split错误:与 2D 数组和 .split 的类型不兼容
【发布时间】:2015-09-16 14:40:28
【问题描述】:

觉得昨天被问到同样的问题很愚蠢,但今天在不同的情况下可以做同样的事情。

single[z][i] = (board[i].split("?!^"));  

这行给了我一个错误:需要不兼容的类型:字符串 找到:字符串[] 1 个错误 我知道它是因为它是一个 2D 数组和拆分给它自己的字符串输出,但不知道如何修复。 这是我所有的代码:

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);

   }

   }

【问题讨论】:

  • 你甚至没有解释你的代码的意图。我们可以通过阅读来猜测,但这很无聊。您必须使您的问题易于阅读。
  • 抱歉,我正在尝试确定网格上 1 的坐标,用于游戏
  • String.split() 返回一个String[];您正在尝试将其分配给 String

标签: java multidimensional-array incomplete-type


【解决方案1】:

假设split 预计会返回代表所需8 个元素的Strings 数组,您应该只在外循环中执行splits,然后在split 中迭代结果内循环或数组复制方法:

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);
}

如果您知道每个 split 准确返回 8 个项目,您可以用更简单的方式来做:

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]);
    }
}

【讨论】:

  • 谢谢你能解释一下这是如何工作的,以及我将如何在我尝试过的代码中实现它,我认为我做错了
  • @JTattack 要获得 2D 8x8 字符串数组,您需要将 8 个字符串分成 8 个部分。循环用于第一维;内部循环替换为 arraycopy 如果您知道 split 的结果正好有 8 个项目,您可以进一步简化(参见编辑)。
  • 好的,谢谢,但我需要 i 和 z bc 有图表的行和列部分,所以我需要两者,但它给了我不兼容的部分。希望这有意义
  • @JTattack split("?!^") 已经返回一维数组,所以i 维度已经存在,拆分时无需对其进行任何操作。在这个循环之后添加一对嵌套循环,并打印 zi 所拥有的元素以查看发生了什么。
  • 我可以这样做,但我需要事先保存所有积分。如果我在循环完成后这样做,数据会被遗忘吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 2013-04-19
  • 1970-01-01
  • 2021-12-18
  • 2021-02-21
  • 1970-01-01
相关资源
最近更新 更多