Java/Czytanie z pliku

Odpowiedz Nowy wątek
2019-06-12 20:34
0

Cześć,
Mam zadanie następującej treści:

*Plik tekstowy zawiera liczby całkowite oddzielone od siebie dowolnymi białymi znakami (spacjami, tabulatorami, znakami nowego wiersza).
Napisz program, który pobierze od użytkownika nazwę pliku i wyświetli na ekranie najmniejszą i największą z liczb zapisanych w pliku.

Mam już napisane coś takiego, brakuje mi zawartości pętli while.... Nie wiem jak to zapisać, żeby program brał liczby po kolei i porównywał jedną z drugą, aż znajdzie największą i najmniejszą....

{

public static void main(String[] args) {
  try {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Podaj Nazwe pliku z rozszerzeniem");
    String nazwaPliku = scanner.nextLine();

    Scanner Plik = new Scanner(new File(nazwaPliku));  
   najmniejsza= 
  najwieksza = 
    while (Plik.hasNextInt()) {   

    }
        System.out.println("najmniejsza z liczb z pliku to" +najmniejsza);
       System.out.println("najmniejsza z liczb z pliku to" +najwieksza);

    Plik.close(); 
    }
    catch (FileNotFoundException ex) {
        System.out.println("Nie ma takiego pliku ");  
    }
    catch (InputMismatchException ex) {
        System.out.println("Plik zawiera dane nibędące liczbami");
    }

}

}

Pozostało 580 znaków

2019-06-12 20:54
0

Pierwsza odczytana liczba jest jednocześnie najmniejsza i największa z dotychczas odczytanych, a w pętli na bieżąco porównanie aktualnego min/max z odczytywanymi liczbami:

if (Plik.hasNextInt()) {
    int nextInt = Plik.nextInt();
    int najmniejsza = nextInt;
    int najwieksza = nextInt;
    while (Plik.hasNextInt()) {
        nextInt = Plik.nextInt();
        najmniejsza = Math.min(najmniejsza, nextInt);
        najwieksza = Math.max(najwieksza, nextInt);
    }
edytowany 1x, ostatnio: Potat0x, 2019-06-12 20:56

Pozostało 580 znaków

2019-06-12 21:47
0

Dzięki, program działa poprawnie

Pozostało 580 znaków

2019-06-12 21:49
0

A jak zrobić coś takiego?

  1. Napisz program, który pobierze od użytkownika nazwę pliku tekstowego zawierającego dowolne informacje. Następnie pobierze od użytkownika nazwę drugiego pliku,do którego przepisze treść pierwszego pliku wielkimi literami.
  2. Napisz program, który pobierze od użytkownika nazwę pliku, w którym znajdują się temperatury z obserwowanego tygodnia zapisane następująco:
    poniedziałek 28
    wtorek 23
    środa 24
    czwartek 26
    piątek 20
    sobota 18
    niedziela 19
Uczysz się języka czy szukasz gotowca na zaliczenie? - kixe52 2019-06-12 21:52

Pozostało 580 znaków

2019-06-13 21:30
0
Bunia321 napisał(a):

A jak zrobić coś takiego?

  1. Napisz program, który pobierze od użytkownika nazwę pliku, w którym znajdują się temperatury z obserwowanego tygodnia zapisane następująco:
    poniedziałek 28
    wtorek 23
    środa 24
    czwartek 26
    piątek 20
    sobota 18
    niedziela 19

Pobierz dane Scannerem, przepisz to wszystko do tablicy jeśli nie potrzebujesz tego posortować :v

edytowany 1x, ostatnio: FrankySanky, 2019-06-13 21:30

Pozostało 580 znaków

2019-06-14 13:29
0
Bunia321 napisał(a):
  1. Napisz program, który pobierze od użytkownika nazwę pliku, w którym znajdują się temperatury z obserwowanego tygodnia zapisane następująco:
    poniedziałek 28
    wtorek 23
    środa 24
    czwartek 26
    piątek 20
    sobota 18
    niedziela 19

Done.
Poniższy kod pobiera nazwę pliku, a następnie weryfikuje, czy zawartość tego pliku jest dokładnie taka, jak podana w treści zadania.
Jeśli jego zawartość jest taka, jak w treści - pobiera / zwraca tę nazwę, w przeciwnym wypadku jej nie pobiera / zwraca.

Tutaj przyjąłem uproszczenie, że użytkownik będzie komunikował się z aplikacją za pośrednictwem konsoli (stdin, stdout), ale można to ubrać w jeden poziom abstrakcji wyżej i komunikować się z użytkownikiem w zależności od wymagań.

public class Main {
  private static final String[] temperaturyZObserwowanegoTygodnia = {
      "poniedziałek 28",
      "wtorek 23",
      "środa 24",
      "czwartek 26",
      "piątek 20",
      "sobota 18",
      "niedziela 19"
  };

  public static void main(String... args) {
    final var weryfikacjaCzyWplikuZnajdujaSieTemperaturyZObserwowanegoTygodnia =
        new WeryfikacjaCzyWplikuZnajdujaSieTemperaturyZObserwowanegoTygodnia(
            temperaturyZObserwowanegoTygodnia
        );

    final var pobieraczNazwyPlikuWKtormyZnajdujaSieTemperaturyZObserwowanegoTygodnia =
        new PobieraczNazwyPlikuWKtormyZnajdujaSieTemperaturyZObserwowanegoTygodnia(
            new Scanner(System.in), System.out, temperaturyZObserwowanegoTygodnia,
            weryfikacjaCzyWplikuZnajdujaSieTemperaturyZObserwowanegoTygodnia);
    final var nazwaPlikuWKtorymZnajdujaSieTemperaturyZObserwowanegoTygodnia =
        pobieraczNazwyPlikuWKtormyZnajdujaSieTemperaturyZObserwowanegoTygodnia.pobierz();
    nazwaPlikuWKtorymZnajdujaSieTemperaturyZObserwowanegoTygodnia
        .ifPresentOrElse(nazwa -> System.out.println("Pobrano nazwę pliku: " + nazwa),
            () -> System.out.println("Nie udało się pobrać nazwy pliku."));
  }

  static class PobieraczNazwyPlikuWKtormyZnajdujaSieTemperaturyZObserwowanegoTygodnia {

    private final Scanner in;
    private final PrintStream out;
    private final String[] temperaturyZObserwowanegoTygodnia;
    private final WeryfikacjaCzyWplikuZnajdujaSieTemperaturyZObserwowanegoTygodnia weryfikacjaCzyWplikuZnajdujaSieTemperaturyZObserwowanegoTygodnia;

    PobieraczNazwyPlikuWKtormyZnajdujaSieTemperaturyZObserwowanegoTygodnia(Scanner in,
        PrintStream out,
        String[] temperaturyZObserwowanegoTygodnia,
        WeryfikacjaCzyWplikuZnajdujaSieTemperaturyZObserwowanegoTygodnia weryfikacjaCzyWplikuZnajdujaSieTemperaturyZObserwowanegoTygodnia) {
      this.in = in;
      this.out = out;
      this.temperaturyZObserwowanegoTygodnia = temperaturyZObserwowanegoTygodnia;
      this.weryfikacjaCzyWplikuZnajdujaSieTemperaturyZObserwowanegoTygodnia = weryfikacjaCzyWplikuZnajdujaSieTemperaturyZObserwowanegoTygodnia;
    }

    Optional<String> pobierz() {
      printCommand();
      final var nazwaPlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia = readLine();
      return weryfikujCzyWPlikuZnadujaSieTemperaturyZObserwowanegoTygodnia(
          nazwaPlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia);
    }

    private Optional<String> weryfikujCzyWPlikuZnadujaSieTemperaturyZObserwowanegoTygodnia(
        String nazwaPlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia) {
      try {
        final var zweryfikowano = weryfikacjaCzyWplikuZnajdujaSieTemperaturyZObserwowanegoTygodnia
            .weryfikujCzyWPlikuZnajdujaSieTemperaturyZObserwowanegoTygodnia(
                nazwaPlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia);
        return zweryfikowano
            ? Optional.of(nazwaPlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia)
            : Optional.empty();
      } catch (IOException e) {
        return Optional.empty();
      }
    }

    private String readLine() {
      final var potencjalnieNazwaPlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia =
          in.nextLine();
      if (potencjalnieNazwaPlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia
          .isBlank()) {
        out.println("Nazwa pliku nie może być pusta.");
        printCommand();
        return readLine();
      }
      return potencjalnieNazwaPlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia;
    }

    private void printCommand() {
      out.println(
          "Podaj nazwę pliku, w którym znajdują się temperatury z obserwowanego tygodnia zapisane następująco:");
      printTemperatura();
    }

    private void printTemperatura() {
      for (String temperatura : temperaturyZObserwowanegoTygodnia) {
        out.println(temperatura);
      }
    }
  }

  static class WeryfikacjaCzyWplikuZnajdujaSieTemperaturyZObserwowanegoTygodnia {

    private final String[] temperaturyZObserwowanegoTygodnia;

    WeryfikacjaCzyWplikuZnajdujaSieTemperaturyZObserwowanegoTygodnia(
        String[] temperaturyZObserwowanegoTygodnia) {
      this.temperaturyZObserwowanegoTygodnia = temperaturyZObserwowanegoTygodnia;
    }

    boolean weryfikujCzyWPlikuZnajdujaSieTemperaturyZObserwowanegoTygodnia(
        String nazwaPlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia)
        throws IOException {
      final var liniePlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia = Files.lines(
          new File(nazwaPlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia).toPath())
          .limit(temperaturyZObserwowanegoTygodnia.length
              + 1) // zeby sprawdzic, czy plik nie ma przypadkiem wiecej linii
          .toArray(String[]::new);

      if (liniePlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia.length
          != temperaturyZObserwowanegoTygodnia.length) {
        return false;
      }

      return IntStream.range(0, temperaturyZObserwowanegoTygodnia.length)
          .filter(i -> temperaturyZObserwowanegoTygodnia[i]
              .equals(liniePlikuWKtorymPowinnyZnajdowacSieTemperaturyZObserwowanegoTygodnia[i]))
          .count() == temperaturyZObserwowanegoTygodnia.length;
    }
  }
}
edytowany 1x, ostatnio: catom, 2019-06-14 13:32
A może @catom się po prostu dostosował do poziomu kodu z pierwszego postu? :D - kixe52 2019-06-14 13:50
@danek: @Chramar: @kixe52: Patrząc na posty (zwłaszcza pytania OPa) w tym wątku, nie mogłem się powstrzymać :P A przy okazji, zrobiłem sobie miłą kilkunastominutową przerwę. :) Przez chwilę, myślałem nawet o napisaniu czegoś jeszcze bardziej absurdalnego, ale aż tyle czasu nie mam. - catom 2019-06-14 14:11
Słabe bo co to za testy w main :P Trzeba było napisać porządne JUnitowe testy! - Shalom 2019-06-15 19:49

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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