【问题标题】:How to correctly do matrices input in java如何在java中正确输入矩阵
【发布时间】:2015-02-18 06:03:05
【问题描述】:

我有问题。

我正在尝试制作一个用户可以输入的程序

r=行 c=列 之后的 0 和 1,只要矩阵是满的

所以它会创建一个图片 .... r*v ....,用 char 的 1 和 0 填充。

那些 1 代表块。 现在程序应该输出那张图片中有多少块? (00010011110 - 随机矩阵第一行的示例) - 将打印出 2

我正在努力正确地输入该程序,然后计算这些块的数量。

这是我迄今为止一直在尝试的。

import java.util.Scanner;

class Blocks{

    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);

        int rowNum=sc.nextInt();            //number of rows
        int columnNum=sc.nextInt();         //number of columns

        int blocks=0;
        char[][] matrix=new char[rowNum][columnNum];


        for (int a = 0; a < rowNum; a++) {
            for (int b = 0; b < columnNum; b++) {
                char[] row= sc.next().toCharArray();

           for(int i=0; i<matrix.length;i++) {
            if(row[i]=='1'){
                blocks++;
                if(row[i+1]=='1') {
                blocks--;
            }
        }   
    }
}


    }   
}

【问题讨论】:

  • 为什么 2 代表(00010011110 - 例如随机矩阵的第一行)- 会打印出 2?
  • 有什么问题?
  • 另一个例子:r=2 c=4 0010 1100 1111 0101 这将打印出 5。因为它只在该矩阵中查找 1,而 1 构成一个块。 11 是块大小 2。1111 是块大小 4...等等。上面的例子有 3 个块。第一排一个,第二排一个,第三排又一个,第四排两个街区
  • 问题是我什至不能正确输入。我如何一直要求用户给我这些数字(0 和 1),直到矩阵已满。
  • 块是一个或多个相邻元素的组,其值为 1。

标签: java matrix multidimensional-array


【解决方案1】:

这样的事情怎么样

int blocks = 0;
char[][] matrix = new char[rowNum][columnNum];


int nbrOfBlocks = 0;
for (int a = 0; a < rowNum; a++) {
  matrix[a] = sc.next().toCharArray();

  int index = 0;
  while (index < matrix[a].length) {

    if (matrix[a][index] == '1') {
      ++nbrOfBlocks;
      while (index < matrix[a].length && matrix[a][index] == '1') {
        ++index;
      }
    }

    ++index;
  }
}

System.out.println(nbrOfBlocks);

【讨论】:

  • 深度优先搜索与这个简单的问题有什么关系?
  • 最初的问题并没有说明块仅在一行内形成,对于此类块,DFS 将是一个很好的解决方案。
  • @Simon 块也可以在 00100/ 00100/ 10000/ 列中形成 2 个块...
  • @Simon 谢谢!但是,如果块在列中,这将如何工作......或者如果块是完美的矩形,我将在帖子中添加更多信息......你太棒了!
【解决方案2】:
char ch[][];
 int rowNum=sc.nextInt();           
 int columnNum=sc.nextInt();
 ch=new char[rowNum][columnNum];
 for (int a = 0; a < rowNum; a++) 
        for (int b = 0; b < columnNum; b++) 
            ch[a][b]= sc.next();
  int i=0;j=0;
 for (int a = 0; a < (rowNum*columnNum); a++) 
  {
             row[a]=ch[i][j];
             i++;
             if(i==rowNum)
                  j++;
  }

这可能会成功

if(row[i]=='1'){    
            if(row[i+1]=='0') 
            blocks++;
        }

【讨论】:

  • 这只是接受输入的第一部分
  • 请格式化并正确解释,否则会有很多反对票
  • 很抱歉给您添麻烦
  • 这在尝试编译时给我一个错误...不兼容的类型:char[] 无法转换为 char
猜你喜欢
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2019-05-11
  • 1970-01-01
  • 2017-12-14
  • 2021-07-05
  • 1970-01-01
相关资源
最近更新 更多