java - 迭代 nextLine 函数的问题

标签 java string input

我正在尝试使用用户输入的 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
.#.##
#####
##...
###..
#####
在这种情况下,输出应为 1。

最佳答案

问题是您正在创建多个从 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/

相关文章:

Javascript/jQuery 转到下一个输入/选择更改选择值

java - 无法使用 gradle 创建 RPM

html - 关闭 HTML 输入会破坏任何内容吗?反之亦然?

java - JTable 单元格内的 JComboBox

c - C中的字符串怪异

ruby-on-rails - rails 3/postgres - 如果不应用 :limit in schema 字符串有多长

java - 字符串性能-内存

jquery - 如果使用 jQuery 输入为空,则禁用提交按钮

java - 调整 JButton 的大小

java - 从终端实体获取根证书和中间证书