Wczytanie macierz z pliku txt z danymi typu Double

0

Cześć,

Słabo się znam na programowaniu obiektowym, więc proszę o pomoc.

Mam plik txt, a w nim macierz o nieznanych rozmiarach i zmiennych długościach wiersza z liczbami niecałkowitymi np:

3881.153 3880.114 3880.112 3881.62
3882.607 3883.463
3882.978 3883.031 3881.994 3881 3879.992 3880.001
3880.162 3880.941 3875.972 3872.014 3867.092 3863.85
3862.002 3861.041 3861.043 3861.899 3862.425 3863.488 3865.162 3866.91

Potrzeba jest, aby program wczytał do pamięci te dane jako macierz.

Pozdrawiam,
Karol

0

Jeżeli mają różną ilość liczb w wierszu to raczej nie wczytasz tego do macierzy :P
pokaż co masz to Ci powiemy co i jak musisz poprawić :)

1

Słabo się znam na programowaniu obiektowym fajnie, bo to nie ma nic do programowania obiektowego.

#quote becouse that's not real Matrix (from definition)
Types:
    Item = double
    Line = list of Items
    "Matrix" = list of Lines
Funcs:
    LoadItem() -> load item, then return
    LoadLine() -> add every object from LoadItem() to line, then return
    LoadMatrix() -> add every object from LoadLine() to "matrix", then return
1
void t(File f) throws IOException {
        List<String> lines = Files.readLines(f, Charsets.UTF_8);
        List<List<Double>> matrix= new ArrayList<List<Double>>(lines.size());
        for(String line: lines){
            String[] numbs = line.split(" ");
            List<Double> nLine = new ArrayList<Double>(numbs.length);
            for(String numb: numbs){
                nLine.add(Double.parseDouble(numb));
            }
            matrix.add(nLine);
        }
    }

Przy czym jak tu korzystam z Google Gauva (java 6 na kompie...), ale jak masz javę 7+ to:

  • Tam jest klasa Files i nalezy jej użyć zamiast guavowej (sposób użycia praktycznie identyczny).
  • zamiast pętli można użyć Stream API w celu transforamcji stringów na double
0

Co chcesz osiągnąć? Takie dane możesz wrzucić do tablicy dwuwymiarowej z różną liczbą wierszy. Użycie będzie przyjemniejsze.

0
Koziołek napisał(a):
void t(File f) throws IOException {
List<String> lines = Files.readLines(f, Charsets.UTF_8);
List<List<Double>> matrix= new ArrayList<List<Double>>(lines.size());
for(String line: lines){
String[] numbs = line.split(" ");
List<Double> nLine = new ArrayList<Double>(numbs.length);
for(String numb: numbs){
nLine.add(Double.parseDouble(numb));
}
matrix.add(nLine);
}
}

Koziołek dziękuję za podpowiedź. Jednak Nie daję sobie rady z wczytaniem pliku z dysku.

Atlas500 napisał(a):

Co chcesz osiągnąć? Takie dane możesz wrzucić do tablicy dwuwymiarowej z różną liczbą wierszy. Użycie będzie przyjemniejsze.

Mam do wprowadzenia dużo danych i co chwilę dochodzą nowe. Taki sposób wprowadzania danych jest w tym wypadku najwygodniejszy.

0
car0l napisał(a):

Koziołek dziękuję za podpowiedź. Jednak Nie daję sobie rady z wczytaniem pliku z dysku.

A z czym masz konkretnie problem?

0
import java.util.ArrayList;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.io.FileReader;
import java.io.BufferedReader;

public class Macierz{
public static void main(String[] args) throws IOException {

    BufferedReader f = new BufferedReader(new FileReader(new File("sample-file.dat")));
    List<String> lines = Files.readLines(f, Charsets.UTF_8);//**tutaj trzeba ominąć guavę**
    List<List<Double>> matrix= new ArrayList<List<Double>>(lines.size());
    for(String line: lines){
        String[] numbs = line.split(" ");
        List<Double> nLine = new ArrayList<Double>(numbs.length);
        for(String numb: numbs){
            nLine.add(Double.parseDouble(numb));
        }
        matrix.add(nLine);
    }
}}
2

Jeśli korzystasz z javy w wersji minimum 1.7 to:

package pl.programmers.matrix;

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;

/**
 * Author: Daniel
 */
public class MatrixTest {

    public static void main(String[] args) {
        new MatrixTest();
    }

    public MatrixTest() {
        try {
            File file = new File("numbers.txt");
            List<List<Double>> t = t(file);
            for (List<Double> doubles : t) {
                System.out.println(doubles.toString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    List<List<Double>> t(File f) throws IOException {
        List<String> lines = Files.readAllLines(f.toPath(), Charset.forName("UTF-8"));
        List<List<Double>> matrix= new ArrayList<List<Double>>(lines.size());
        for(String line: lines){
            String[] numbs = line.split(" ");
            List<Double> nLine = new ArrayList<Double>(numbs.length);
            for(String numb: numbs){
                nLine.add(Double.parseDouble(numb));
            }
            matrix.add(nLine);
        }
        return matrix;
    }
}
0

Dzięki :) ułatwiło mi to życie!

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