【问题标题】:Problems with iterated nextLine function迭代 nextLine 函数的问题
【发布时间】:2020-04-14 19:07:36
【问题描述】:

我正在尝试使用用户输入的 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

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。

【问题讨论】:

  • 您能否编辑问题以包含您正在使用的输入?并且把它变成一个我们可以运行的完整程序
  • @Joni 抱歉耽搁了我去吃晚饭。

标签: java string input


【解决方案1】:

问题是您创建了多个从System.in 读取的Scanner。当数据随时可用时,Scanner 对象可以读取比您要求的更多的数据。 numerificar() 方法中的第一个 Scanner 读取的内容多于第一行,而 vetor() 方法中的第二个 Scanner 无法使用这些行。

解决方案:在整个程序中只使用一个 Scanner 对象。

public class Main {
    static Scanner globalScanner = new Scanner(System.in);  

    static int[] numerificar() {
        String Input = globalScanner.nextLine();
        String[] Inputs = Input.split(" ", 0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2019-02-27
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多