我正在尝试使用用户输入的 N 行 N 个字符来执行一些操作。但首先我需要知道 N 和另一个正在输入的 int 。当我定义 N 和另一个整数 K,然后编写 5 行(在本例中),每行 5 个字符时,程序运行良好。但是当我使用表示的字符串 a (然后我将其拆分为 2 个整数,N 和 K,此处未显示,以免使事情复杂化)时,会发生错误。即使我现在输入 6 行,即每行 5 个字符中的最后 5 行,程序也会给出“找不到多功能行”的错误。我不明白问题出在哪里,如果我删除字符串 a 并只定义 N 和 K 程序运行良好。更令人惊讶的是,如果我使用交互式控制台而不是文本输入并一一写下术语,程序就会运行。
static String [][] vetor (int N) {
Scanner scan = new Scanner(System.in);
String[][] multi = new String [N][N];
for (int i = 0 ; i<N ; i++){
String forest = scan.nextLine();
String[] chars = forest.split("");
for (int k=0; k<N; k++){
multi[i][k]= chars [k];
}
}
return multi;
}
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
String a = scan.nextLine();
int N = 5;
int K = 5;
String [][] multi = vetor(N);
我尝试了很多事情,但我无法理解这一点。我没有找到任何类似的问题,但请随时将我重定向到解释。
编辑:这是一个可以运行的类似程序(可能输入向下(K<= N)):
import java.util.Scanner;
import java.util.Arrays;
public class Main {
static int[] numerificar() {
Scanner myObj = new Scanner(System.in);
String Input = myObj.nextLine();
String[] Inputs = Input.split(" ", 0);
int size = Inputs.length;
int [] a = new int [size];
for(int i=0; i<size; i++) {
a[i] = Integer.parseInt(Inputs[i]);}
return a;
}
static String [][] vetor (int N) {
Scanner scan = new Scanner(System.in);
String[][] multi = new String [N][N];
for (int i = 0 ; i<N ; i++){
String forest = scan.nextLine();
String[] chars = forest.split("");
for (int k=0; k<N; k++){
multi[i][k]= chars [k];
}
}
return multi;
}
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
int[] a = numerificar();
int N = a[0];
int K = a[1];
int cadeira = 0;
String [][] multi = vetor(N);
for (int i = 0 ; i<N ; i++){
if (cadeira == 1) {
break;
}
for (int k=0; k<N-K+1; k++){
if (cadeira == 1) {
break;
}else if( multi[i][k].equals(".")){
for (int j=0; j<K; j++){
if(multi[i][k+j].equals( "#")){
k+=j;
break;
} else if (j == K-1) {
cadeira = 1;
}
}
}
}
}
System.out.println(cadeira);
}
}
5 3
.#.##
#####
##...
###..
#####
最佳答案
问题是您正在创建多个从 System.in
读取的 Scanner
。当数据容易获得时,Scanner 对象可以读取比您要求的更多的数据。 numerificar()
方法中的第一个扫描器读取的内容多于第一行,而这些行对于 vetor()
方法中的第二个扫描器不可用。
解决方案:整个程序中只使用一个Scanner对象。
public class Main {
static Scanner globalScanner = new Scanner(System.in);
static int[] numerificar() {
String Input = globalScanner.nextLine();
String[] Inputs = Input.split(" ", 0);
关于java - 迭代 nextLine 函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61215321/