• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd w kodzie - gdzie?

Object Storage Arubacloud
0 głosów
167 wizyt
pytanie zadane 6 czerwca 2019 w Java przez Nerez Użytkownik (970 p.)

Witam. Próbowałem zrobić system zapisywania do pliku, udało mi się zrobić coś takiego, ale wyskakuje błąd (Cos jest nie tak w nieskończonej pętli for(;;), ponieważ po usunieciu jej kod działa). Naprawi mi ktoś ten kod, i pokaże jak wyszukiwać w pliku? Chce zrobić system logowania, ale nie wiem jak wyszukać wpisany loginu w miejscu logowania w pliku

 

 . Drugi błąd jest następujący: Nie mogę uruchomić systemu logowania.  Po kliknieciu 2 resetuje się i wraca do "Menu Głównego" zamiast wyświetlić tekst.

import java.util.Scanner;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.File;
import java.io.Writer;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.*;
import java.util.*;
class login {
    public static void main(String[] args) throws IOException, InterruptedException, FileNotFoundException {
      Writer zapis = null;
        try {
          zapis = new BufferedWriter(new OutputStreamWriter(
            new FileOutputStream("logowanie")));
        for(;;) {
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
        Scanner scan = new Scanner(System.in);
        System.out.println("MENU GLOWNE");
        System.out.println("-----------");
        System.out.println("1.Rejestracja");
        System.out.println("2.Logowanie");
        System.out.println("3.Wylacz program");
        System.out.println("-----------");
        int wybor = scan.nextInt();

        if (wybor == 1) {
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
            Scanner skan = new Scanner(System.in);
            System.out.println("Utworz login:");
            String login = skan.nextLine();
            zapis.write("" + login + "\n");
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
            System.out.println("Utworz haslo:");
            String haslo = skan.nextLine();
            zapis.write("" + haslo + "\n");
            
        }
        if (wybor == 2) {
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
            //Scanner in = new Scanner(plik);
            //String logyn = in.nextLine();
            System.out.println("Podaj login: ");
            }
        if (wybor > 3) {
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
          System.exit(1);
        }
      }
    }
            catch (IOException ex) {
              // report
             } finally {
           try {zapis.close();} catch (Exception ex) {}
             
            }
          }
        }
          
  
      
             
          
                            

 

 

1 odpowiedź

0 głosów
odpowiedź 16 lipca 2019 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

Jak dla mnie pętla for działa poprawnie, aczkolwiek twoje rozwiązanie nie jest najlepsze. 

Znalazłem tu kilka błędów.

Drugi błąd jest następujący: Nie mogę uruchomić systemu logowania.  Po kliknieciu 2 resetuje się i wraca do "Menu Głównego" zamiast wyświetlić tekst.

 Twój kod każe po wybraniu 2 wypisać tekst i zakończyć działanie. Nie wiem czy taki był Twój zamysł, czy nie chciałeś czasem czekać na jakieś dane?

 if (wybor == 2) {
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
            //Scanner in = new Scanner(plik);
            //String logyn = in.nextLine();
            System.out.println("Podaj login: ");
            }

Kolejna moja wątpliwość to zapis

if (wybor > 3) {
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
          System.exit(1);
        }

W menu chcesz aby po wybraniu 3, program się zakończył. Twój kod mówi coś innego... naciśnij coś więcej ale nie 3 aby zakończyć program. Powinieneś być konsekwentny i zapisać warunek np if(wybór ==3). 

 

Dobra praktyka aby kod był bardziej odporny na błędy. Używaj bloku try catch z resourcami zamiast try catch finaly. 

Podobne pytania

0 głosów
1 odpowiedź 467 wizyt
pytanie zadane 18 grudnia 2018 w JavaScript przez Jaroslaw Roj Obywatel (1,990 p.)
0 głosów
3 odpowiedzi 326 wizyt
pytanie zadane 19 października 2018 w C i C++ przez karkul Użytkownik (620 p.)
0 głosów
4 odpowiedzi 723 wizyt
pytanie zadane 28 grudnia 2017 w C i C++ przez dendos12 Początkujący (260 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...