【问题标题】:Issue reading integers from file using Scanner使用 Scanner 从文件中读取整数的问题
【发布时间】:2025-12-13 07:45:01
【问题描述】:

我在使用扫描仪从输入文件中读取整数时遇到问题。这是我遇到问题的代码:

        String path = sc.nextLine(); 
        
        File filename = new File(path);
        
        Scanner reader = null;
        
        reader = new Scanner(filename);
        
        for(int i = 0; i < 4; i++)
        {  
           while(reader.hasNextInt()) 
           {   
               System.out.println(reader.nextLine());
               pid[i] = reader.nextInt();
               arrivaltime[i] = reader.nextInt();
               burstTime[i] = reader.nextInt();
           }      
        } 

我正在使用的输入文件包含以下信息:

1 1 1
2 2 2
3 3 3
4 4 4

使用这个文件,我试图使它成为 pid[] = [1,2,3,4],arrivaltime[] = [1,2,3,4] 和 bursttime[] = [1, 2,3,4]。但是,这些数组中的每一个都显示为 [4,0,0,0],我无法弄清楚为什么我的生活。任何帮助将不胜感激。

【问题讨论】:

  • while(reader.hasNextInt()) 这一行总是询问是否还有一个整数,并且有,所以你的for-loop 永远不会进行任何迭代

标签: java arrays file java.util.scanner


【解决方案1】:

试试这个:

    for(int i = 0; i < 4; i++)
    {

        if (reader.hasNextInt()) {
            pid[i] = reader.nextInt();
            arrivaltime[i] = reader.nextInt();
            burstTime[i] = reader.nextInt();
        }
    }

    

【讨论】:

    【解决方案2】:

    当您使用scanner.nextLine() 时,文件中的扫描仪指针会跳过第一行。

    如果您不想打印每一行或使用其他解决方案进行拆分,您可以使用它。

    int i = 0;
    while(reader.hasNextInt()) {
        pid[i] = reader.nextInt();
        arrivaltime[i] = reader.nextInt();
        burstTime[i] = reader.nextInt();
        i++;
    }
    

    【讨论】:

      【解决方案3】:

      试试这个: 先读一行 那就拆分吧!

      int i = 0
      while(reader.hasNextLine()){
         String[] line = reader.nextLine().split(" ");
         pid[i] = Integer.parseInt(line[0]);
         arrivaltime[i] = Integer.parseInt(line[1]);
         burstTime[i] = Integer.parseInt(line[2]);
         i++;
      }
      

      【讨论】:

      • 没问题,如果这对您有帮助,您可以接受它作为正确答案!