Преобразование строки чисел в 2d-массив

#java

#java

Вопрос:

Здравствуйте, у меня есть файл с информацией в формате

5.1,3.5,1.4,0.2,Iris-setosa

Каждая строка содержит 4 числа и одну строку, всего 75 строк. Я пытаюсь сохранить числа в 2D-массив, а затем строку в ее собственный 1D-массив. Но у меня возникли проблемы с преобразованием из имеющегося у меня массива строк в 2D-массив с двойным значением

 ...
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;

public class NearestNeighbor {

   public static void main(String[] args) throws FileNotFoundException {
    
    //creates empty values for our arrays
    double [][] testingVal= new double[75][4]; 
    double[][] trainingVal= new double[75][4];
    String [] trainingClassLabel = new String [75];
    String [] testingClassLabel = new String [75];
    
    //User inputs for file names
    Scanner input = new Scanner(System.in);
    System.out.print("Enter the name of the training file: ");
    String training=input.nextLine();
    System.out.print("Enter the name of the testing file: ");
    String testing=input.nextLine();
    
    //creates array for our training values
    File trainingFile = new File(training);
    Scanner fileScanTraining = new Scanner(trainingFile);
    for (int i = 1; fileScanTraining.hasNext(); i  ) {
        String line = fileScanTraining.nextLine();
        trainingVal=line.split(",",4);
        System.out.println(line); 
    }
    
    
    //creates array for our testing values
    File testingFile = new File(testing);
    Scanner fileScanTesting = new Scanner(trainingFile);
    //Finally we close our scanners
    fileScanTraining.close();
    fileScanTesting.close();
    input.close();
  }


  }

 ...
  

Комментарии:

1. «[H] устранение неполадок» охватывает много вопросов. Можете ли вы более точно указать, с какой проблемой вы столкнулись?

2. Преобразование моего массива строк в 2D-массив. Я не знаю, какой средний шаг мне нужен, чтобы иметь возможность это сделать

3. ПОДСКАЗКИ: String[] data = line.split(","); и (во вложенном цикле for) testingVal[i][j] = Double.parseDouble(data[j]); . Это как-нибудь помогает?

Ответ №1:

Вам просто нужно внести пару изменений в цикл, в котором вы читаете содержимое trainingFile .

 Scanner fileScanTraining = new Scanner(trainingFile);
for (int i = 1; fileScanTraining.hasNextLine(); i  ) { // changed this line
    String line = fileScanTraining.nextLine();
    String[] numbers = line.split(",", 4); // added this line
    for (int j = 0; j < 4; j  ) { // added this loop
        trainingVal[i][j] = Double.parseDouble(numbers[j]);
    }
    System.out.println(line); 
}
  

Ответ №2:

Можно использовать простой цикл, как показано ниже —

     int i=0;
    while (fileScanTraining.hasNext()){
        String line = fileScanTraining.nextLine();
        String[] splittedVal=line.split(",");
        int j=0;
        while(j< 4){
            testingVal[i][j]=Double.parseDouble(splittedVal[j]);
            j  ;

        }
    i  ;
    }