- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试编写一个程序来读取多个文件并逐行比较它们。要读取的文件数量取自用户,文件的格式预计为“input1.txt”、“input2.txt”等。
当我尝试运行代码时,出现“NoSuchElementException”,告诉我 Scanner.nextLine() line: line not available。该代码位于第 50 行,即:jthLine.add(myScanners.get(k - 1).nextLine());
。我不明白为什么没有一行可以读取,因为这已经在一个受最小行数限制的循环中完成了。
感谢任何帮助!这是我的代码:
// Compares n input files, prints the lines that are not equal in all.
import java.util.Scanner;
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
public class CompareFiles {
public static void main(String[] args) throws IOException {
Scanner consoleScanner = new Scanner(System.in);
int numberOfFiles;
System.out.println("Please enter how many files are there. The" +
"file names should be like: input1.txt input2.txt, etc.");
numberOfFiles = consoleScanner.nextInt();
ArrayList<Scanner> myScanners = new ArrayList<Scanner>();
for (int k = 1; k <= numberOfFiles; k++)
myScanners.add(new Scanner(new File("input" + k + ".txt")));
// Find the file line counts.
ArrayList<Integer> lineCounts = new ArrayList<Integer>();
Integer lineCount;
String increment;
for (int i = 1; i <= numberOfFiles; i++) {
lineCount = 0;
while (myScanners.get(i - 1).hasNext()) {
increment = myScanners.get(i - 1).nextLine();
lineCount++;
}
lineCounts.add(lineCount);
}
// Find the minimum file count.
int minLineCount = Collections.min(lineCounts);
// Compare files until minLineCount line by line
// println all the unmatching lines from all files
// jthLine holds the incremented lines from all files
ArrayList<String> jthLine = new ArrayList<String>();
boolean allMenAreTheSame;
for (int j = 1; j <= minLineCount; j++) {
allMenAreTheSame = true; // are all jth lines the same?
for (int k = 1; k <= numberOfFiles; k++) {
jthLine.add(myScanners.get(k - 1).nextLine());
if (!jthLine.get(0).equals(jthLine.get(k)))
allMenAreTheSame = false;
}
if (!allMenAreTheSame) {
System.out.println();
System.out.println("Line number " + j + " is not the same" +
"across all files, printing the lines:");
for (int k = 1; k <= numberOfFiles; k++) {
System.out.println("File: \"input" + k + ".txt\":");
System.out.println(jthLine.get(k - 1));
}
}
jthLine.clear();
}
}
}
最佳答案
您收到此错误的原因是在计算行数时扫描仪对象 myScanners.get(i - 1)
到达文件末尾。因此,当您尝试再次读取它时,它将从您离开的位置(即文件末尾)开始。
有不同的方法,但我认为最简单的是创建新的扫描仪对象。
for (int i = 1; i <= numberOfFiles; i++) {
lineCount = 0;
while (myScanners.get(i - 1).hasNext()) {
increment = myScanners.get(i - 1).nextLine();
lineCount++;
}
lineCounts.add(lineCount);
}
myScanners.clear()
for (int k = 1; k <= numberOfFiles; k++)
myScanners.add(new Scanner(new File("input" + k + ".txt")));
// Find the minimum file count.
int minLineCount = Collections.min(lineCounts);
关于java - "Line not available"读取 nextLine() 时出错;从文件扫描仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426479/
我正在使用下面的代码但收到警告, bool versionSupports = (@available(iOS 10, *)); @available does not guard availabil
我需要检查 Xamarin.iOS 中的 API 可用性 - 在 Objective-C 或 Swift 中我可以使用这些调用: if (@available(iOS 13, *)) 或 if #av
我遇到了一个我似乎不明白的奇怪问题。我正在制作一个从文件中读取数据的程序。但是当我读取数据时,我立即收到 EOFException。 所以我用 .available() 检查文件是否为空。我得到了一个
Swift 2.0 允许使用 @available 或 #available 进行可用性检查,但是使用 @available 和 有什么区别#可用? 最佳答案 您可以使用 if #available
我刚刚开始学习 angularjs 我尝试了这段代码:在文件 angularmy.js var myname = angular.module("myModule",[]); myname.contr
我有一个 USB 麦克风和扬声器适配器连接到 raspberry pi 3。我已经在 alsamixer 上设置了所有内容。我也设置了pcm.!default sysdefault:0在文件中 .as
import requests import time import csv import ast import sys import mysql.connector config = { 'user
我想让页脚的宽度与浏览器无关。 对于 Mozilla,我想使用 -moz-available 的值,当用户使用 Opera 时,那么 CSS 应该从 -webkit-fill-available 中获
如果您的代码需要仅在 macOS 10.12 或更高版本中可用的功能,但您希望您的代码也部署到更早的系统版本,您可以使用 @available在 Objective-C 中: if (@availab
我正在使用 Element Query允许在任何元素上使用 @media queries 的元素。这是它的处理方式: #foo:media(min-available-width:350px and
我正在尝试安装 oracle 19c,但在安装过程中遇到了与内存相关的问题“[INS-35179] 当前可用内存小于创建数据库所需的可用内存 (6,537MB)”。我仔细检查了所有先决条件,例如超过
我正在编写代码以使用此页面中的文档跟踪现场请求:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-bid-
我仔细阅读了 Kubernetes 文档 here关于扩展 imagefs.available 的默认 15%和其他参数,但没有说明如何设置,我已经安装了具有以下配置的 RKE(Rancher Kub
我想进入PAPI。我在Debian GNU/Linux上有5.3.2.0版。 papi_avail告诉我没有可用的硬件事件: $ papi_avail Available events and har
我目前正在构建一个混合云解决方案,需要将消息写入队列以供稍后处理。队列具有高可用性(99.999+% 的正常运行时间)是绝对必要的。 我的选择是将消息读/写到本地 ZeroMQ 高可用性对或 Azur
在 Mac OS X Leopard 中使用 Eclipse Helios 并调试调用 fsf gdb 7.1 的 C++ 代码,调试停止在 main 的第一行。然后在第一步之后我得到 No sour
无论如何,是否可以将 UIWebView 与针对 tvos 的应用程序一起使用?这个苹果文档,UIWebView Class Reference ,会建议否则不是吗?或者我只是解释错了? UIWebV
我想删除以下数据框中的“不可用”,但是当我使用以下代码将 Number 更改为数字时,“不可用”变为 4: c1 data 是一个 factor 列。 当您将一个因子直接转换为numeric 时,生成
PushKit 在 iOS 11 中提供了一种新方法,旨在取代 iOS 10 中的方法。 使用 iOS 11 作为基础 SDK 构建时无法使用 iOS 10 方法(我当前使用的是 Xcode 9.2B
不确定使用@rename 指令的所有方法。 我正在尝试重命名一个方法 @available(*, deprecated, renamed: "setValueInTable") public func
我是一名优秀的程序员,十分优秀!