如何使用不带空格的输入(扫描仪方法)填充二维数组
How to fill 2D array using input (scanner method) without spaces
我需要使用不带空格的输入来填充二维数组,因此为此我首先尝试使用 'String'。
import java.util.Scanner;
import java.util.Arrays;
public class TikTakToe {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char[][] TikTakToe = new char[3][3];
System.out.print("Enter cells: ");
String enter = scanner.next();
for (int i = 0; i < TikTakToe.length; i++) {
for (int j = 0, l = 0; j < TikTakToe[i].length && l < enter.length(); j++, l++) {
TikTakToe[i][j] = enter.charAt(l);
}
}
for (char[] chars : TikTakToe) {
System.out.println(Arrays.toString(chars).substring(1).replaceFirst("]",
"").replace(", ", " "));
}
}
}
Input: XOXOXOXOX
Output:
X O X
X O X
X O X
这个解决变量'l'在外部'for'循环进入下一阶段后重置的问题。我该如何解决?
您应该在循环外初始化 int l = 0
。当内部循环 运行.
时,它将是 re-initialized
因此您的最终代码如下所示:-
import java.util.Scanner;
import java.util.Arrays;
public class TikTakToe {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char[][] TikTakToe = new char[3][3];
System.out.print("Enter cells: ");
String enter = scanner.next();
int l = 0; // initialize here
for (int i = 0; i < TikTakToe.length; i++) {
for (int j = 0; j < TikTakToe[i].length && l < enter.length(); j++, l++) {
TikTakToe[i][j] = enter.charAt(l);
}
}
for (char[] chars : TikTakToe) {
System.out.println(Arrays.toString(chars).substring(1).replaceFirst("]",
"").replace(", ", " "));
}
}
您的问题是您在嵌套的 for
循环中定义了变量 l
。因此,当该循环 returns、l
被删除时。
您需要做的是在第一个循环之前定义 l
,这样它的范围就是整个方法。
...
char[][] TikTakToe = new char[3][3];
System.out.print("Enter cells: ");
String enter = scanner.next();
int l = 0; // <-- **I moved the declaration here**
for (int i = 0; i < TikTakToe.length; i++) {
for (int j = 0 /*removed the declaration from here*/; j < TikTakToe[i].length && l < enter.length(); j++, l++) {
TikTakToe[i][j] = enter.charAt(l);
}
}
...
我需要使用不带空格的输入来填充二维数组,因此为此我首先尝试使用 'String'。
import java.util.Scanner;
import java.util.Arrays;
public class TikTakToe {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char[][] TikTakToe = new char[3][3];
System.out.print("Enter cells: ");
String enter = scanner.next();
for (int i = 0; i < TikTakToe.length; i++) {
for (int j = 0, l = 0; j < TikTakToe[i].length && l < enter.length(); j++, l++) {
TikTakToe[i][j] = enter.charAt(l);
}
}
for (char[] chars : TikTakToe) {
System.out.println(Arrays.toString(chars).substring(1).replaceFirst("]",
"").replace(", ", " "));
}
}
}
Input: XOXOXOXOX
Output:
X O X
X O X
X O X
这个解决变量'l'在外部'for'循环进入下一阶段后重置的问题。我该如何解决?
您应该在循环外初始化 int l = 0
。当内部循环 运行.
因此您的最终代码如下所示:-
import java.util.Scanner;
import java.util.Arrays;
public class TikTakToe {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char[][] TikTakToe = new char[3][3];
System.out.print("Enter cells: ");
String enter = scanner.next();
int l = 0; // initialize here
for (int i = 0; i < TikTakToe.length; i++) {
for (int j = 0; j < TikTakToe[i].length && l < enter.length(); j++, l++) {
TikTakToe[i][j] = enter.charAt(l);
}
}
for (char[] chars : TikTakToe) {
System.out.println(Arrays.toString(chars).substring(1).replaceFirst("]",
"").replace(", ", " "));
}
}
您的问题是您在嵌套的 for
循环中定义了变量 l
。因此,当该循环 returns、l
被删除时。
您需要做的是在第一个循环之前定义 l
,这样它的范围就是整个方法。
...
char[][] TikTakToe = new char[3][3];
System.out.print("Enter cells: ");
String enter = scanner.next();
int l = 0; // <-- **I moved the declaration here**
for (int i = 0; i < TikTakToe.length; i++) {
for (int j = 0 /*removed the declaration from here*/; j < TikTakToe[i].length && l < enter.length(); j++, l++) {
TikTakToe[i][j] = enter.charAt(l);
}
}
...