Java 将数据从文件读取到数组中,然后将数据输出到另一个文件中
需要一些帮助来解决这个问题。 我想将data.txt中的数据输入bsorted.txt,并使用bubbleSort对其进行排序 我需要将随机数字和字母生成到数据文件中,然后将它们读入数组,并在排序后将这些数据输出到另一个文本文件中 我收到一个Java 将数据从文件读取到数组中,然后将数据输出到另一个文件中,java,arrays,file,printwriter,Java,Arrays,File,Printwriter,需要一些帮助来解决这个问题。 我想将data.txt中的数据输入bsorted.txt,并使用bubbleSort对其进行排序 我需要将随机数字和字母生成到数据文件中,然后将它们读入数组,并在排序后将这些数据输出到另一个文本文件中 我收到一个非接触式异常: Exception in thread "main" java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Unknown Source)
非接触式异常
:
Exception in thread "main" java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Unknown Source) at SortingExample.main(SortingExample.java:257)
代码:
class dataFile {
public static void dataFile() {
try {
PrintWriter writer = new PrintWriter("data.txt");
String alphaNumerics = "qwertyuiopasdfghjklzxcvbnm1234567890";
String t = "";
for (int i = 0; i < 2000; i++) {
t += alphaNumerics.charAt((int) (Math.random() * alphaNumerics.length()));
}
writer.println(t);
writer.close();
}
catch(Exception ex) {
System.out.println("Error accessing file.");
System.out.println("Reason was: "+ex.getMessage());
ex.printStackTrace();
}
}
}
class SortingExample {
public static void main(String[] args) throws IOException {
dataFile.dataFile();
Scanner bscan = new Scanner(new File("data.txt"));
PrintWriter bsorted = new PrintWriter("bsorted.txt");
StringType[] strings = new StringType[2000];
for (int i = 0; i < strings.length; i++){
strings[i] = new StringType(bscan.nextLine());
}
Sort.bubbleSort(strings);
bsorted.println("Bubble Sort number of comparisons: " + Sort.bubbleComp + "\r\n" + "Bubble Sort number of exchanges: " + Sort.bubbleEx + "\r\n");
for (int i = 0; i < strings.length; i++) {
bsorted.println(strings[i].toString());
}
bsorted.close();
}
}
类数据文件{
公共静态void数据文件(){
试一试{
PrintWriter=新的PrintWriter(“data.txt”);
字符串alphaNumerics=“QWERTYUIOPASDFHJKLZXCVBNM1234567890”;
字符串t=“”;
对于(int i=0;i<2000;i++){
t+=alphaNumerics.charAt((int)(Math.random()*alphaNumerics.length());
}
作者:println(t);
writer.close();
}
捕获(例外情况除外){
System.out.println(“访问文件时出错”);
System.out.println(“原因是:+ex.getMessage());
例如printStackTrace();
}
}
}
类排序示例{
公共静态void main(字符串[]args)引发IOException{
dataFile.dataFile();
Scanner bscan=新扫描仪(新文件(“data.txt”);
PrintWriter bsorted=新的PrintWriter(“bsorted.txt”);
StringType[]strings=新StringType[2000];
for(int i=0;i
作为任何人,有什么想法可以帮助我吗?在继续阅读扫描仪的下一行之前,您需要检查
Scanner.hasNextLine()
是否正确。这将帮助您确定是否已安全到达文件结尾标记
因此,循环的将是:
for (int i = 0; i < strings.length; i++) {
if (bscan.hasNextLine())
strings[i] = new StringType(bscan.nextLine());
}
在我看来,循环的次数比文件中的行多
您的data.txt文件中可能只有不到2000行,但是for循环仍然尝试运行大约2000次,每次都从该文件中读取另一行
我建议您计算data.txt中有多少行,并多次遍历for循环
请尝试以下代码以确定行数:
LineNumberReader lnr=newlinenumberreader(新文件读取器(新文件(“data.txt”))代码>
lnr.skip(长最大值)代码>
然后,您所要做的就是遍历循环lnr.getLineNumber()
次。根据您的代码:
for (int i = 0; i < 2000; i++) {
t += alphaNumerics.charAt((int) (Math.random() * alphaNumerics.length()));
}
writer.println(t);
writer.close();
for(int i=0;i<2000;i++){
t+=alphaNumerics.charAt((int)(Math.random()*alphaNumerics.length());
}
作者:println(t);
writer.close();
看起来您将所有内容都附加到一个字符串中,并将其作为一个大行写出一次。换句话说,将2000个元素连接到一个字符串中
您的扫描仪正在查找2000行,因此当它只看到一行时失败
我的建议是写下以下几行:
for (int i = 0; i < 2000; i++) {
t = alphaNumerics.charAt((int) (Math.random() * alphaNumerics.length()));
writer.println(t);
}
writer.close();
for(int i=0;i<2000;i++){
t=alphaNumerics.charAt((int)(Math.random()*alphaNumerics.length());
作者:println(t);
}
writer.close();
离题,但有许多约定让我从OO的角度暂停,例如小写类名(数据文件),一个不象动词的方法名(数据文件)也发布您的异常,它将为人们提供一个很好的开始帮助您的地方。实际上我做了编辑,我想我必须删除data.txt才能刷新它。我修正了一些事情,现在data.txt中的数据由于某种原因已经被排序了。
for (int i = 0; i < 2000; i++) {
t = alphaNumerics.charAt((int) (Math.random() * alphaNumerics.length()));
writer.println(t);
}
writer.close();