Dostęp do komórki w tablicy w ArrayList

0

Cześć, uczę się Javy i napotkałem problem. Kod wygląda następująco:

public static ArrayList getContent(String path) throws IOException {
        ArrayList lines = new ArrayList();

        File file = new File(path);

        Scanner src = new Scanner(file);

        while (src.hasNextLine()) {
            String[] data = new String[4];

            data = src.nextLine().split(";");

            lines.add(data);
        }

        return lines;
}

Teraz nie wiem jak się dostać do poszczególnych komórek w tablicy data. Poniższy sposób oczywiście jest niepoprawny.

ArrayList lines = FileExt.getContent("C:/Zawodnicy.txt");

for(int i = 0; i < lines.size(); i++) {
     for(int j = 0; j < 4; j++) {
         System.out.println(lines.get(i)[j]);
     }
}

Macie jakieś pomysły?

Pozdrawiam

0

Niepoprawny, czyli? Może plik jest niepoprawny? Poza tym użyj generyków i foreacha. new String[4] jest niepotrzebny, bo split przecież sam tworzy sobie tablicę.

0

Masz plik "C:/Zawodnicy.txt" na dysku?

0

Coś takiego działa:

public static ArrayList getContent(String path) throws IOException {
        ArrayList lines = new ArrayList();

        File file = new File(path);

        Scanner src = new Scanner(file);

        while (src.hasNextLine()) {
            //lines.add(src.nextLine().split(";"));
            lines.add(src.nextLine());
        }

        return lines;
}
ArrayList lines = FileExt.getContent("C:/Zawodnicy.txt");

for(int i = 0; i < lines.size(); i++) {
       System.out.println(lines.get(i));
}

Plik istnieje i jest jak najbardziej poprawny.

Co do typów generycznych i pętli foreach to nie bardzo wiem jak podejść.

0
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

    List<String[]> getContent(String path) throws IOException {
        List<String[]> lines = new ArrayList<String[]>();

        File file = new File(path);

        //Scanner src = new Scanner(file);
        Scanner src = new Scanner("a;b;c;d\n1;2;3;4"); // prowizorka, bo nie chciało mi się tworzyć pliku na dysku i wklepywać ścieżki

        while (src.hasNextLine()) {
            String[] data = src.nextLine().split(";"); // tej zmiennej nawet tutaj nie trzeba, można od razu wyrażenie włożyć do lines.add()
            lines.add(data);
        }

        return lines;
    }

    void run() throws Throwable {
        List<String[]> lines = getContent("Zawodnicy.txt");

        System.out.println("\"Tradycyjne\" pętle, typ 1:");
        for (int rekord = 0; rekord < lines.size(); rekord++) {
            for (int pole = 0; pole < lines.get(rekord).length; pole++) {
                System.out.println(lines.get(rekord)[pole]);
            }
        }

        System.out.println("\"Tradycyjne\" pętle, typ 2:");
        for (int rekordId = 0; rekordId < lines.size(); rekordId++) {
            String[] rekord = lines.get(rekordId);
            for (int pole = 0; pole < rekord.length; pole++) {
                System.out.println(rekord[pole]);
            }
        }

        System.out.println("Foreach:");
        for (String[] rekord : lines) {
            for (String pole : rekord) {
                System.out.println(pole);
            }
        }
    }

    public static void main(String[] args) throws Throwable {
        new Main().run();
    }
}

Zamiast skakać na głęboką wodę, to poczytaj najpierw "Trails covering the basics" ze strony: http://download.oracle.com/javase/tutorial/

0

Jeszcze dla JDK7:

import java.io.IOException;
import java.nio.file.Paths;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static List<String[]> getContent(String path) throws IOException {
        List<String[]> lines = new LinkedList<>();

        try (Scanner src = new Scanner(Paths.get(path))) {
            while (src.hasNextLine()) {
                lines.add(src.nextLine().split(";"));
            }
        }

        return lines;
    }

    public static void main(String[] args) {
        try {
            for (String[] line : getContent("olaboga.txt")) {
                for (String string : line) {
                    System.out.println(string);
                }
            }
        } catch (IOException ex) {
            // ...
        }
    }

}
0

Dzięki Wam bardzo. Widzę, że jeszcze sporo nauki mnie czeka. I co miałeś na myśli Wibowit pisząc żebym nie skakał na głęboką wodę? Zgłębiać tajniki Javy pewnie będę jeszcze długo, okropnie rozbudowany język.

0

Chodziło mniej więcej o to, żebyś więcej czytał, zanim będziesz pisał. A język Java wcale nie jest jakoś mocno rozbudowany. C# już jest bardziej rozbudowany, nie mówiąc o C++ (a tym bardziej o C++11 aka C++0x).

0

Ja wybrałem Javę na następny język, wcześniej programowałem w Delphi, obecnie w PHP. C# z tego co czytałem to nie oferuje więcej niż Java, ale tego nie sprawdzałem. Przyznam, że Twoje zdanie na temat C++, że jest rozbudowany troszkę mnie zaskoczyło.

0

Tu masz szczyptę nowego standardu: http://en.wikipedia.org/wiki/C%2B%2B11
Poza tym założę się, że kiepsko znasz C++, np wiesz jaka jest różnica pomiędzy:

const int * pointer;

, a int * const pointer;

? Albo co daje "const" w definicji: <code class="cpp">typ klasa::metoda(argumenty) const { ciało }

Przejrzyj sobie np źródła biblioteki Boost czy STL i zobacz jakie fajne konstrukcje są w środku i czy je rozumiesz.

Język Java to nie jedyny język na platformę Java, tak samo jak C# to nie jedyny język na platformę .NET. Można użyć np języka Scala na platformie Java, nota bene Scala się świetnie integruje z Javą (zarówno językiem jak i platformą). Scala jest sporo lepsza od Javy czy C#, jednak mało ludzi ją zna.

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