英文:
How to set 2 dim Array by input string without blank?
问题
这是我的代码:
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
String[][] s = new String[size][size];
for (int row = 0; row < s.length; row++) {
for (int col = 0; col < s[row].length; col++) {
s[row][col] = sc.next();
}
}
for (int row = 0; row < s.length; row++) {
for (int col = 0; col < s[row].length; col++) {
System.out.print(s[row][col] + " ");
}
System.out.println();
}
现在当我输入 3,然后输入数组值时:
3
a b c
a b c
a b c
输出将会是这样:
a b c
a b c
a b c
因此,我想知道如何修改代码,以便在我输入以下内容时获得相同的输出:
3
abc
abc
abc
英文:
This is my code:
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
String[][] s = new String[size][size];
for (int row = 0; row < s.length; row++) {
for (int col = 0; col < s[row].length; col++) {
s[row][col] = sc.next();
}
}
for (int row = 0; row < s.length; row++) {
for (int col = 0; col < s[row].length; col++) {
System.out.print(s[row][col] + " ");
}
System.out.println();
}
Now when i input 3, then input array value:
3
a b c
a b c
a b c
The output like this:
a b c
a b c
a b c
So I want to know how can i change the code to get same output when I input like this:
3
abc
abc
abc
答案1
得分: 1
试试这个。
int size = sc.nextInt();
String[][] s = new String[size][];
for (int row = 0; row < s.length; row++) {
s[row] = sc.next().split("");
}
for (int row = 0; row < s.length; row++) {
for (int col = 0; col < s[row].length; col++) {
System.out.print(s[row][col] + " ");
}
System.out.println();
}
英文:
Try this.
int size = sc.nextInt();
String[][] s = new String[size][];
for (int row = 0; row < s.length; row++) {
s[row] = sc.next().split("");
}
for (int row = 0; row < s.length; row++) {
for (int col = 0; col < s[row].length; col++) {
System.out.print(s[row][col] + " ");
}
System.out.println();
}
答案2
得分: 0
java.util.Scanner.next()方法从扫描器中查找并返回下一个完整的标记。完整的标记是由匹配分隔符模式的输入前导和后续部分组成的。因此,扫描器使用分隔符模式将输入拆分为标记,默认情况下与空白字符匹配。
您必须使用某种分隔符。例如,您可以将分隔符设置为','
Scanner sc = new Scanner(System.in);
sc.useDelimiter(",");
然后您的输入应该像这样:
3,
a,b,c,
a,b,c,
a,b,c,
您的输出将是:
a b c
a b c
a b c
在您的情况下,如果您想要这样的输入:
3
abc
abc
abc
然后逐个接收字符,您不能这样做,因为您必须指定一些分隔符,正如我所说,如果您不指定,默认分隔符将被采用。
然而,您可以编写一个绕过代码,类似于这样:
Scanner sc = new Scanner(System.in);
sc.useDelimiter("\\n");
int size = sc.nextInt();
String[][] s = new String[size][size];
for (int row = 0; row < s.length; row++) {
String input = sc.next();
for (int col = 0; col < s[row].length; col++) {
s[row][col] = String.valueOf(input.toCharArray()[col]);
}
}
for (int row = 0; row < s.length; row++) {
for (int col = 0; col < s[row].length; col++) {
System.out.print(s[row][col] + " ");
}
System.out.println();
}
然后您可以像这样传递输入:
3
abc
abc
abc
您应该会看到以下输出:
a b c
a b c
a b c
英文:
The java.util.Scanner.next() method finds and returns the next complete token from this scanner. A complete token is preceeded and followed by input that matches the delimiter pattern. So, scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace.
You must use some kind of delimiter. For example, you can set delimiter to be ','
Scanner sc = new Scanner(System.in);
sc.useDelimiter(",");
Then your input should be like this :
3,
a,b,c,
a,b,c,
a,b,c,
And Your output would be :
a b c
a b c
a b c
In your case, if you want to take input like this:
3
abc
abc
abc
and then take characters one by one, you can't do it like that, beacause you must specify some delimiter, and as I said, if you don't the default delimiter will be taken.
However, you can write a workaround code, something like this :
Scanner sc = new Scanner(System.in);
sc.useDelimiter("\\n");
int size = sc.nextInt();
String[][] s = new String[size][size];
for (int row = 0; row < s.length; row++) {
String input = sc.next();
for (int col = 0; col < s[row].length; col++) {
s[row][col] = String.valueOf(input.toCharArray()[col]);
}
}
for (int row = 0; row < s.length; row++) {
for (int col = 0; col < s[row].length; col++) {
System.out.print(s[row][col] + " ");
}
System.out.println();
}
}
Then You pass your input like this:
3
abc
abc
abc
And you should see the following output:
a b c
a b c
a b c
答案3
得分: 0
以下是翻译好的部分:
这是我个人的看法,这也是最简单的方法。如果你想要,它还允许每一行的长度不同。
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
// 清除之前的换行符
sc.nextLine();
// 初始化行数。
String[][] s = new String[size][];
// 输入行
for (int rows = 0; rows < size; rows++) {
String row = sc.nextLine();
// 在每个字符之间分割
s[rows] = row.split("");
}
// 打印矩阵
for (String[] row : s) {
System.out.println(String.join(" ", row));
}
对于输入:
3
abc
def
ghi
打印结果为:
a b c
d e f
g h i
英文:
Imho, this is the easiest way. It also allows for each row to be a different length if you want.
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
// clear the previous new line
sc.nextLine();
//initialize the number of rows.
String[][] s = new String[size][];
// enter the rows
for (int rows = 0; rows < size; rows++) {
String row = sc.nextLine();
// split between each character
s[rows] = row.split("");
}
//print the matrix
for (String[] row : s) {
System.out.println(String.join(" ",row));
}
For input
3
abc
def
ghi
Prints
a b c
d e f
g h i
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论