好吧所以我正在研究从System.in获取输入的内容;第一行是表示矩阵大小的int(n)。接下来的n行是矩阵本身,如下所示:
10
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 1 0 1 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 1 0 0 0 0
0 0 0 0 1 0 0 1 1 0
0 1 0 0 0 0 0 1 0 0
0 0 0 0 0 1 1 0 0 0
1 1 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0
问题是单个输入中可能有多个矩阵,所以下一行将有另一个int和下面的相应矩阵,直到它遇到一个单一的0。然后我必须传递每个矩阵的大小在顶部作为BufferedReader到一个方法,将数字添加到2D数组。
我只是不确定如何拆分输入并将其发送到方法。是否使用skip()创建一个新的BufferedReader并在每次工作时指定一个大小?我似乎遇到的最大问题是读取大小,但随后大小被排除,因为它已被阅读。
干杯
编辑:使用Bhesh Gurung的方法工作,非常感谢。这就是我最终的结果。我认为一些if语句是多余的但是有效。BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
ArrayList<GraphAdjMatrix> mat = new ArrayList<GraphAdjMatrix>();
try
{
String line = buffer.readLine().trim();
String[] tokens = line.split("\\s+");
boolean[][] adj;
int n = Integer.parseInt(tokens[0]);
while (n != 0) {
if (tokens.length == 1 && n > 0) {
adj = new boolean[n][n];
for (int i = 0; i < n; i++) {
line = buffer.readLine().trim();
tokens = line.split("\\s+");
if (tokens.length != n)
{
throw new Error("bad format: adjacency matrix");
}
for (int j = 0; j < n; j++)
{
int entry = Integer.parseInt(tokens[j]);
adj[i][j] = entry != 0;
}
}
mat.add(new GraphAdjMatrix(adj, n));
}
line = buffer.readLine().trim();
tokens = line.split("\\s+");
n = Integer.parseInt(tokens[0]);
}
}
catch (IOException x) { throw new Error("bad input stream"); }
答案 0 :(得分:1)
使用BufferedReader.readLine
方法逐行阅读输入。
对于每一行,使用String.split
方法将其拆分,该方法返回一个字符串数组。如果数组的大小为1且唯一元素为非零,则初始化具有该数字大小的二维数组。并使用其余行填充该数组,并将该数组发送到该方法。当您找到另一个非零单个整数时再次启动相同的过程,或者当它为0时再次退出。
您可以使用Integer.parseInt
方法解析字符串中的整数。
答案 1 :(得分:0)
基于你的帖子,看起来大小绝对是随意的。即首先你要输入2 x 3矩阵然后输入3 x 1矩阵。
在这种情况下,您需要阅读尺寸。您的输入可以采用这种格式
Enter the number of Matrices : 3
First Matrix
Rows :
Columns :
Elements :
Second Matrix
Rows :
Columns :
Elements :
.
.
所以你读的时间和时间!! 如果你在谷歌和codechef中采取谜题。您将遇到类似的情况,您将输入测试用例的数量作为输入。
答案 2 :(得分:0)
我相信你只需要使用while循环来处理传入数组的大小。
你甚至可以获得数组的大小并使用while循环条件中的整数。
Scanner sc = new Scanner(System.in);
int x;
while((x = sc.nextInt()) != 0){
for (int i = 0; i < x; i++){
System.out.println("do this " + x + " times");
}
}
希望这有帮助。
编辑: 这可能不够清楚..在你的while循环中,然后你可以根据你的x变量填充一个二维数组(使用嵌套的for循环)。
由于输入的数量始终是已知的,因此这应该是管理数组创建输入的最简单方法。
答案 3 :(得分:0)
您是否尝试通过用户做出正确的条目来实现这样的目标?
Scanner sc= new Scanner(System.in);
int[][] matrix = new int[1][1];
int size = 0;
String inputString = null;
while(!"0".equals((inputString = sc.nextLine()))){
String[] elements = inputString.split(" ");
if(elements.length == 1){
//this is size entry
size = Integer.parseInt(elements[0]);
matrix = new int[size][size];
}else{
for(int i=0; i< size; i++){
inputString = sc.nextLine();
elements = inputString.split(" ");
for(int j=0; j<elements.length; j++){
matrix[i][j] = Integer.parseInt(elements[j]);
}
}
//pass your size and matrix to other class/method
// .....
}
}