ДИКЛАЙМЕР: Этот ответ был первоначально отправлен на повторяющийся вопрос одним и тем же пользователем, поэтому я перепубликую его здесь, чтобы сохранить все на одном месте для будущих читателей.
У вас есть несколько проблем, которые необходимо исправить, прежде чем вы сможете приступить к решению основной проблемы - опубликованный вами код даже не компилируется.
Это ваш код ниже. Сможете ли вы определить проблему?
public void getCoefTime(int coefTime) {
this.coefTime = coefTime;
}
Он должен выглядеть следующим образом (ваш компилятор предупредил бы вас о проблеме):
// this method should be a setter not a getter
// your code called for setCoefTime(), but that method didn't exist
public void setCoefTime(int coefTime) {
this.coefTime = coefTime;
}
В вашей модели таблицы отсутствует обязательный метод. Каждый раз, когда вы создаете реализацию, расширяющую интерфейс, вам необходимо реализовать все сигнатуры методов из этого интерфейса. В вашем случае вам не хватает следующего метода, и, опять же, ваш компилятор предупредил бы вас о проблеме:
@Override
public int getColumnCount()
{
return columnNames.length;
}
Ваш файл данных организован менее чем желательно. Кажется, вы написали его так, как будто его основная функция заключалась в предоставлении информации человеку, а не программе, поэтому у вас есть эти красивые метки, ориентированные вертикально, а не горизонтально, даже если вы хотите, чтобы ваш JTable
отображался горизонтально.
Вместо
Average Critical Operation Count: 30791
Standard Deviation of Count: 32884
Average Execution Time: 282750
Standard Deviation of Time: 241038
у вас должен быть, возможно, файл значений, разделенных запятыми (CSV), например
trial 1,30791,32884,282750,241038
trial 2,30791,32884,282750,241038
trial 3,30791,32884,282750,241038
trial 4,30791,32884,282750,241038
Вы получали ArrayIndexOutOfBoundsException
, потому что ваш код читал линия
Recursive Selection Sort Results:
как line1
, а при звонке line1[1]
там ничего нет. Вы split
на двоеточии, но справа от двоеточия нет ничего, поэтому метод split
не беспокоится о создании нового токена.
Избавьтесь от всех хороших заголовков и тому подобного, потому что вы мне просто нужно будет прочитать эти строки и выбросить их позже - они хуже, чем бесполезны, потому что они на самом деле создают проблемы, когда ваш код не ожидает их присутствия.
Итак, вы, кажется, основали свой код чтения файлов из-за неправильного понимания того, как файлы читаются. Каким бы ни было ваше нынешнее понимание чтения файлов, забудьте о нем и сделайте вид, что вы никогда о нем раньше не слышали. Цель состоит в том, чтобы прочитать строки одну за другой, разбить строку на блоки данных (мы назовем их токенами) и упаковать их в объект Line
перед переходом к следующей строке - мы не читаем пять строк за раз здесь.
Этот вид вещей больше не нужен, если вы разумно организуете свои входные данные:
String[] line1 = file.readLine().split(":");
String[] line2 = file.readLine().split(":");
String[] line3 = file.readLine().split(":");
String[] line4 = file.readLine().split(":");
String[] line5 = file.readLine().split(":");
Теперь все, что вам нужно сделать, это что-то вроде этого:
while((line = bufferedReader.readLine()) != null)
{
// for purposes of clarity, we're changing the name of your Line object
// in this example to TrialRecord
String[] tokens = line.split(",");
TrialRecord record = new TrialRecord();
record.setSize( Integer.parseInt(tokens[0]));
// the rest of your code...
}
Исправьте все это, и ваша таблица отобразит ваши данные.