我正在尝试使用字符串拆分器来显示用户输入,例如1,2坐标显示在控制台上。运行代码时,我没有收到任何错误。但是,我尝试使用拆分器似乎不起作用。
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a row and column number at which to shoot (e.g., 2,3): ");
String[] coordinates = scanner.nextLine().split(",");
if (coordinates.length != 2) {
System.out.println("Please enter coordinates in the correct format.");
System.out.println("\nPlayer 1 Please take your turn:");
continue;
}
System.out.println("\nEnter Mine location:");
System.out.println("\nPlease Enter x position for your Mine:");
System.in.read(byt);
str = new String(byt);
row = Integer.parseInt(str.trim());
System.out.println("\nPlease Enter y position for your Mine:");
System.in.read(byt);
str = new String(byt);
col = Integer.parseInt(str.trim());
答案 0 :(得分:2)
您使用System.in.read(...)
是危险的代码,并没有按照您的想法行事:
System.in.read(byt); // *****
str = new String(byt);
row = Integer.parseInt(str.trim());
而是使用扫描仪,您已拥有的,并在扫描仪上调用getNextInt()
,或者获取该行并对其进行解析。
另外,你永远不会使用坐标数组中保存的字符串 - 如果忽略它们,为什么要使用字符串?
你问:
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a row and column number at which to shoot (e.g., 2,3): ");
str = scanner.nextInt().split(",");
然后看到编译器不允许这样做,因为你试图调用scanner.nextInt()
返回的int原语的方法。
我建议使用Scanner#nextInt()
代替您滥用System.in.read(...)
。如果您希望用户在一行中输入两个数字(以逗号分隔),那么您最好选择使用String.split(",")
,但我认为使用{{1}可能更好摆脱任何空白,如悬空的空间。这样,拆分应该适用于String.split("\\s*,\\s*")
以及1,1
和1, 2
,然后您可以通过1 , 2
解析数组中保存的项目。