Я думаю, что моя проблема здесь является немой, синтаксической проблемой, но вот она. Я пишу программу, которая берет CSV-файл, который представляет собой 3 строки из 4 столбцов чисел. Я беру этот файл в качестве параметра во время выполнения, затем разбиваю символ новой строки (\ n), а затем разбиваю на разделитель запятой. Затем я сохраняю это в «2D-массив» типа String. Затем я беру каждое значение, разберусь, чтобы удвоить, и заполнить второй «2D-массив», но в два раза на этот раз. Все работает хорошо.Исключение номера формата в классе
Моя проблема в том, когда я попытался взять весь этот код и поместить его в свой класс. Я добавил конструктор к основному, и в классе я скопировал и вставил ранее рабочий код. Но теперь, когда синтаксический анализ из строки в double, я получаю исключение NumberFormatException при переходе с 4-го на 5-й элемент. Точный же код работает при кодировании в основном.
Я думаю, что мое знание классов - это моя проблема здесь.
Вот класс творю:
import java.lang.*;
public class DataMatrix {
private double[][] dMatrix;
public DataMatrix(String text) {
String[] line = text.split("\n");
// Creates an array for the CSV file
String[][] sMatrix = new String[line.length][];
for(int i=0; i < line.length; i++)
sMatrix[i] = text.split(",");
System.out.println("Original String: ");
for(int x=0; x < sMatrix.length; x++) {
for(int j=0; j <= line.length; j++) {
System.out.println(sMatrix[x][j]);
}
}
double[][] dMatrix = new double[sMatrix.length][];
System.out.println("Converted to double: ");
for(int x=0; x < sMatrix.length; x++) {
dMatrix[x] = new double[sMatrix[x].length];
for(int j=0; j <= sMatrix.length; j++) {
dMatrix[x][j] = Double.parseDouble(sMatrix[x][j]);
System.out.println(dMatrix[x][j]);
}
}
}
}
Вот мой главный (игнорировать комментарии, используя их, когда я копировать/вставить материал из него):
import java.lang.*;
public class Assignment1{
public static void main(String[] args){
// DecimalFormat df = new DecimalFormat("#.##");
//Make sure the user passed the command line argument - and nothing else
if (args.length != 1){
System.out.println("Assignment1 takes exactly one command-line argument.");
System.out.println("Usage: java Assignment1 some_file.csv");
System.exit(0);
}
String csvFileName = args[0];
//Instantiate my custom file reader
CSVReader fileReader = new CSVReader();
//Read the file into a string
String text = fileReader.readFile(csvFileName);
DataMatrix matrix = new DataMatrix(text);
}//end of main
}//end of class
EDIT: Здесь мой выход:
Files contents:
1,2,3,4
3,4,1,0
2,3,4,2
Original String:
1
2
3
4
3
4
1
0
2
3
4
2
Converted to double:
1.0
2.0
3.0
Exception in thread "main" java.lang.NumberFormatException: For input string: "4 3"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1250)
at java.lang.Double.parseDouble(Double.java:540)
at DataMatrix.<init>(DataMatrix.java:30)
at Assignment1.main(Assignment1.java:22)
Укажите строку входа csv, которая не работает. Чтобы облегчить воспроизведение ошибки, временно добавьте отладочный вывод String doubleString = sMatrix [x] [j]; try { Double.parseDouble (doubleString); } catch (NumberFormatException e) { System.out.println ("NFE on:" + doubleString); } – JanPl
Не эта строка 'sMatrix [i] = text.split (", ");' предполагается быть 'sMatrix [i] = строка [i] .split (", ");'? –
Отредактировано мое сообщение, чтобы показать ошибку вывода. –