我想我几乎已经找到了我的java程序。它旨在读取文本文件并使用10个不同的线程查找最大的整数。我收到此错误:
Error:(1, 8) java: class Worker is public, should be declared in a file named Worker.java
我觉得我的代码可能比它需要的更复杂,所以我试图弄清楚如何缩小它的大小,同时修复上面的错误。我将非常感谢您对此事的任何帮助,如果我能澄清任何事情,请告诉我。此外,"工人" class必须是一个单独的文件?我将它添加到同一个文件中但得到上面的错误。
import java.io.BufferedReader;
import java.io.FileReader;
public class datafile {
public static void main(String[] args) {
int[] array = new int[100000];
int count;
int index = 0;
String datafile = "dataset529.txt"; //string which contains datafile
String line; //current line of text file
try (BufferedReader br = new BufferedReader(new FileReader(datafile))) { //reads in the datafile
while ((line = br.readLine()) != null) { //reads through each line
array[index++] = Integer.parseInt(line); //pulls out the number of each line and puts it in numbers[]
}
}
Thread[] threads = new Thread[10];
worker[] workers = new worker[10];
int range = array.length / 10;
for (count = 0; count < 10; count++) {
int startAt = count * range;
int endAt = startAt + range;
workers[count] = new worker(startAt, endAt, array);
}
for (count = 0; count < 10; count++) {
threads[count] = new Thread(workers[count]);
threads[count].start();
}
boolean isProcessing = false;
do {
isProcessing = false;
for (Thread t : threads) {
if (t.isAlive()) {
isProcessing = true;
break;
}
}
} while (isProcessing);
for (worker worker : workers) {
System.out.println("Max = " + worker.getMax());
}
}
}
public class worker implements Runnable {
private int startAt;
private int endAt;
private int randomNumbers[];
int max = Integer.MIN_VALUE;
public worker(int startAt, int endAt, int[] randomNumbers) {
this.startAt = startAt;
this.endAt = endAt;
this.randomNumbers = randomNumbers;
}
@Override
public void run() {
for (int index = startAt; index < endAt; index++) {
if (randomNumbers != null && randomNumbers[index] > max)
max = randomNumbers[index];
}
}
public int getMax() {
return max;
}
}
答案 0 :(得分:1)
我已经写了一些评论,但我将把它们全部收集到一个答案中,以便将来任何人都可以看到汇总信息:
在readtextfile
类的源代码末尾(每个java命名约定应为ReadTextile
),你有太多的结束括号,
} while (isProcessing);
for (Worker worker : workers) {
System.out.println("Max = " + worker.getMax());
}
}
}
}
}
以上应该在击中最左边一列的第一个支撑上结束。在制作任何Java类时,这是一个很好的经验法则,如果你有一个以上的左支撑,或者你的最后一个支撑不是很远,你可能在某个地方犯了一个错误,应该检查你的大括号。 / p>
至于您的文件问题您应该将所有类命名为Java conventions,并且每个类应存储在名为ClassName.java的文件中(区分大小写)。 EG:
public class ReadTextFile
应存储在ReadTextFile.java
您也可以将Worker
作为内部类。要做到这一点,你几乎可以将源代码复制到ReadTextFile
类中(确保它在main
方法之外)。有关内部类的详细信息,请参阅this教程。
至于问题的其余部分Code Review SE是适当的地方,那里的聪明人可能会提供比我更好的答案。但是我也建议使用10个线程可能不是查找文本文件中最大int
的最有效方法(在开发和执行时间)。