Wczytywanie danych typu int z pliku do tablicy

0

witam
Mam do was pytania mianowicie mam plik txt który przedstawia sie tak

3 4 6
5 5 6
3 4 1 
3 4 5
3 3 2

Napisałem metodę w javie, która ma wczytywać dane typu int do tablicy dwuwymiarowej i żeby były w takiej samej kolejnośći jak w dokumencie. I właśnie mam problem, gdyż nie wiem dlaczego nie działa mi mój kod. Czy moglibyście mi pomóc (kod poniżej)

public static int[][] WczytywaniePliku (String nazwa)
    {
        try
        {
        Scanner sc = new Scanner(nazwa);
        String line = sc.nextLine();
        int col = 0;
        int row = 0;
        String[] firstLine = line.split("\\s+");
        List<String> lines = new ArrayList<String>();
        row = firstLine.length;
        
        while (sc.hasNextLine()) 
        {
        lines.add(sc.nextLine());
        col++;
        sc.nextLine();  
        }
        String[] AllLines = lines.toArray(new String[0]);
        int[][] ArrayValues = new int[col][row];
        
        for(int i = 0; i< col; i++)
        {
            String[] numbers = AllLines[i].split("\\s+");
            for(int j = 0; j < row; j++)
            {
                ArrayValues[i,j] = Integer.parseInt(numbers[j]); //błąd jest tutaj (możliwe że są jeszcze jakieś inne)
            }
        }
        
        }
        catch (Exception e)
        {
            System.out.println("Plik raport.txt nie istnieje lub jest niedostępny");
        }
    }

dodanie znacznika <code class="java"> - @furious programming

0

Tak na szybko:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Demo {
     
     public static void main(String[] args) {
          
          int[][] m = createMatrixBasedOnGivenArray(getTxtFileContent(new File("test.txt")));
          
          // print values
          for (int[] i : m) {
               for (int j : i) {
                    System.out.println(j);
               }
          }
     }
     
     public static ArrayList<String> getTxtFileContent(File file) {
          
          BufferedReader reader;
          ArrayList<String> array = new ArrayList<String>();
          
          try {
               reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
               String line;
               
               while((line = reader.readLine()) != null) {
                    array.add(line);
               }
               reader.close();
               
          } catch (IOException ex) {
               ex.printStackTrace();
          }
          return array;
     }
     
     public static int[][] createMatrixBasedOnGivenArray(ArrayList<String> array) {
          
          int[][] matrix = new int[array.size()][3];
          
          try {
               for (int i = 0; i < array.size(); i++) {
                    String[] lineFromArray = array.get(i).split("\\s");
                    
                    for (int j = 0; j < lineFromArray.length; j++) {
                         matrix[i][j] = Integer.parseInt(lineFromArray[j].trim());
                    }
               }
          } catch (NullPointerException ex) {
               ex.printStackTrace();
          }
          return matrix;
     }
}

PS tutaj int[][] matrix = new int[array.size()][3]; ta trójka jest bardzo nieelegancka. Zamień ją na najwyższą znalezioną długość pojedynczej linii w array.

EDIT

W ogóle kilka uwag co do Twojego podejścia:

  1. http://pl.wikipedia.org/wiki/CamelCase - w skrócie: metodyIZmienneNazywamyWTenSposób, a KlasyNazywamyWTenSposób.
  2. ArrayValues[i,j] <- co to ma być? Nie ma czegoś takiego jak [i,j]. Jak już to [i][j].
  3. Gdzie Twoja metoda zwraca tablicę int[][]? Nie widzę słowa kluczowego "return", a nawet gdyby było, to metoda nie miałaby prawa zadziałać. Definicja int[][] ArrayValues; musi wylądować poza blok try/catch. A najlepiej wraz z inicjalizacją, przy której określisz zasięg tablic.
  4. Skoro inicjalizujesz zmienną lines jako ArrayList, to zdefiniuj ją również jako ArrayList.
  5. Po iteracji w pętli while zamykaj Scanner -> sc.close();
  6. String[] AllLines = lines.toArray(new String[0]); co to ma być?
  7. catch (Exception e) służy do określenia możliwego typu wyjątku. Jak już znasz możliwe typy, to je określasz indywidualnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1