Odczyt linia po linii z pliku, separatory, String to int

0

Cześć, mam za zadanie odczytać 4 linie liczb, które każda z nich jest oddzielona innym znakiem - spacja, przecinkiem lub średnikiem. Musze określic który separator jest w której linii, a nastepnie z każdej linii zrobic pętle zeby zrobic w nich monotonicznośc, maxy, miny itp. Jedyne co w miare mi sie udało to te separatory chociaż przez sposób w jaki to zrobiłem chyba blokuje sie z nastepnymi rzeczami. Najwiecej problemu mam, zeby przekształcic linie w int[]tab. Wszystkie podpunkty czyli, separatory, maxy, miny musze zrobic metodami, a nastepnie zapisac do pliku (taki raport)

public class zadanie_02 {


    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new FileReader("liczby.txt"));
        FileWriter zapisywacz = new FileWriter("raport");
        String line1 = Files.readAllLines(Paths.get("liczby.txt")).get(0);
        String line2 = Files.readAllLines(Paths.get("liczby.txt")).get(1);
        String line3 = Files.readAllLines(Paths.get("liczby.txt")).get(2);
        String line4 = Files.readAllLines(Paths.get("liczby.txt")).get(3);

        System.out.println(ZwracaZnak(line1, zapisywacz));
        System.out.println(ZwracaZnak(line2, zapisywacz));
        System.out.println(ZwracaZnak(line3, zapisywacz));
        System.out.println(ZwracaZnak(line4, zapisywacz));

        bufferedReader.close();
        zapisywacz.close();

    }

    static String ZwracaZnak(String linia, FileWriter zapisywacz) throws IOException {
        if (linia.contains(" ")) {
            zapisywacz.write("spacja" + "\n");
        }
        if (linia.contains(",")) {
            zapisywacz.write("przecinek" + "\n");

        }
        if (linia.contains(";")) {
            zapisywacz.write("srednik");

        }
        return linia;

    }

    static int zwracaMax(String line, FileWriter zapisywacz) throws IOException {
        int najwieksza = Integer.MIN_VALUE;
        String[] tab = line.split(" ");
        for (String s : tab) {
            if (Integer.parseInt(s) > najwieksza) {
                najwieksza = Integer.parseInt(s);
                zapisywacz.write(najwieksza);
            }
        }
        return najwieksza;
    }
}
1

Wiele mam na "nie"

Po pierwsze tag Spring - na tym etapie wiedzy to słowo dla ciebie powinno nie istnieć.
Po drugie strasznie nieczysty ten kod jest. Funkcja (przez grzeczność nazwę je metodami) deklarują, że coś tam zwracają, ale w praktyce jeszcze dukują.
Po trzecie są statyczne - i to wg mnie się nie kompiluje, zapisywacz zapisywacz nie jest dostępny. TO by fajnie zapisał, jakby metody były zwykłymi (niestatycznymi a zapisywacz polem w klasie)
Po czwarte deklarują coś innego niż zwaracją (znak -> String)
Po piąte bardzo brzydko sobie radzisz z wielokrotnością linii w pliku. Tablica, pętla, wszytsko by było lepiej niż tak jak jest.
Po szóste za długo pracować na Stringach, i w ogóle nie przechodzisz na liczby
Po siódme ... ósme ... dziewiąte ...

Kolego springowcu

1
for (String s : line.split("[\\s\t,;.]+")) {

lub

Scanner sc=new Scanner(line);
while(sc.hasNext())
{
  if(sc.hasNextInt()) najwieksza=Math.max(najwieksza,sc.getNextInt());
  else sc.getNext();
}
1
public class Zadanie02 {


    public static void main(String[] args)  {
      Zadanie02 zd2 = new Zadanie02();
      zd2.whatever = ....
      zd2.doSomething()
    }
}

Jeszcze lepsze by było, gdyby nazwę zmienić - lub oprócz minimalistycznej klasy startera, zrobić drugą klasę z merytoryką.

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