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

Pobieranie z pliku konkretnych linii

Object Storage Arubacloud
+1 głos
606 wizyt
pytanie zadane 7 lipca 2016 w Java przez Jonki Dyskutant (8,180 p.)
edycja 7 lipca 2016 przez Jonki

Mam taki kod

public static boolean sprawdzanie_PINu(int r_PIN) throws FileNotFoundException
	{
		Pliki pliki = new Pliki();

		pliki.wczytywanie_ilosci_klientow();
		
		PIN = new int[ilosc_klientow];
		File plik = new File("uzytkownicy.txt");
		Scanner input = new Scanner(plik);
		
		int i = 0;
		while(input.hasNextLine())
		{
			//chyba tutaj musi być jakiś kod
		}
		for(int j = 0; j < ilosc_klientow; ++j)
		{
			if(r_PIN == PIN[j])
				return false;
		}
		return true;
	}

próbuję napisać go tak, aby czytał wszystkie linie po kolei i gdy w którejś linii wykryje "PIN: " to pobierze do zmiennej cyfry które znajdują się dalej. Męczę się i nie mogę nic wymyślić.

 

Próbowałem zrobić to tak, ale nie działa.

public static boolean sprawdzanie_PINu(int r_PIN) throws FileNotFoundException, InterruptedException
	{
		Pliki pliki = new Pliki();
		
		pliki.wczytywanie_ilosci_klientow();
		
		PIN = new int[ilosc_klientow];

		File plik = new File("uzytkownicy.txt");
		Scanner input = new Scanner(plik);

		StringTokenizer token;
		
		int i = 0;
		while(input.hasNextLine())
		{
			token = new StringTokenizer(input.nextLine(), "PIN: ");

			while(token.hasMoreElements())
			
				PIN[i] = Integer.parseInt(token.nextToken());
				i++;
			}
			break;
		}
		for(int j = 0; j < ilosc_klientow; ++j)
		{
			if(r_PIN == PIN[j])
				return false;
		}
		return true;
	}

1 odpowiedź

+1 głos
odpowiedź 7 lipca 2016 przez Mr. Szanowny Bywalec (2,180 p.)
wybrane 7 lipca 2016 przez Jonki
 
Najlepsza

A może zrób stringa i przypisuj każdą linijkę pokolei i przy każdym przypisywaniu sprawdzaj czy nie ma czasem PIN: . Osobiście to wtedy bym w notatniku zapisywał tak(czuli po prostu liczby pod pinem):

PIN:                                                                                                                                                    43242432423

i wtedy jak się natkniesz na pin to w if wywołaj przypisanie do inta:

String string;
while(input.hasNextLine()) {
string = input.NextLine();
if(string.equals("PIN:") {
jakiśint = input.nextInt();
}
}

 

komentarz 7 lipca 2016 przez Jonki Dyskutant (8,180 p.)

Zrobiłem coś podobnego, ale o dziwo nie chce działać. Tak jakby nie znajdowało w żadnej linijce 'PIN', a do zmiennej 'string_PIN' prawidłowo wpisuje dane.

PS: Te wyświetlenia dla rozpoznania która część kodu nie działa i czy prawidłowo wpisuje dane.

 

public static boolean sprawdzanie_PINu(int r_PIN) throws FileNotFoundException, InterruptedException
    {
        Pliki pliki = new Pliki();
        
        pliki.wczytywanie_ilosci_klientow();
        
        String string_PIN;
        
        PIN = new int[ilosc_klientow];

        File plik = new File("uzytkownicy.txt");
        Scanner input = new Scanner(plik);
        
        int i = 0;
        System.out.println("1PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!");
        Thread.sleep(2000);
        while(input.hasNextLine())
        {
            string_PIN = input.nextLine();
            System.out.println("2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!" + string_PIN);
            Thread.sleep(1000);
            
            if(string_PIN.equals("PIN"))
            {
                System.out.println("3PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!" + input.nextLine());
                Thread.sleep(1000);
            }
        
        }

        for(int j = 0; j < ilosc_klientow; ++j)
        {
            if(r_PIN == PIN[j])
                return false;
        }

        return true;
    }

 

komentarz 7 lipca 2016 przez Mr. Szanowny Bywalec (2,180 p.)
Zobacz czy w notatniku masz napisane jako "PIN" a nie czasem"PIN:" czy jakoś jeszcze inaczej, jeśli nie  to wyświetlaj w out te stringi jaki przypisuje. powinno ci całe dokument tak wyświetlic czyli. System.out.println(string);
komentarz 7 lipca 2016 przez Jonki Dyskutant (8,180 p.)
edycja 7 lipca 2016 przez Jonki

W ogóle tego warunku nie chce spełnić. Wynik programu jest taki

1PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!ID: 1
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Imie: wsqarwqr
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Nazwisko: qwrwer
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Rok urodzenia: 1997
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!PIN: 1212
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Haslo: wqrwqerwq
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Stan konta: 0
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!ID: 2
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Imie: wqarqwr
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Nazwisko: qwrqwr
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Rok urodzenia: 1997
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!PIN: 1212
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Haslo: qwrwqrqwr
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Stan konta: 0

 

Plik tekstowy wygląda tak


ID: 1
Imie: wsqarwqr
Nazwisko: qwrwer
Rok urodzenia: 1997
PIN: 1212
Haslo: wqrwqerwq
Stan konta: 0

ID: 2
Imie: wqarqwr
Nazwisko: qwrqwr
Rok urodzenia: 1997
PIN: 1212
Haslo: qwrwqrqwr
Stan konta: 0

Przy wyświetlaniu przez program pojawia się za dużo pustych linii.

1
komentarz 7 lipca 2016 przez Mr. Szanowny Bywalec (2,180 p.)
string po prostu wziął ci pin wraz z numerem. "PIN".equals("PIN: 1212") nie da ci prawdy. Dlatego napisałem w komentarzu głównym że dla ułatwienia Liczby napisać pod PINem a nie obok. Ale zostaw jak jest i zastosuj input.next(). i Wtedy porównaj do "PIN:" - dokładnie tak. Wtedy if powinnien dać true i wtedy wywołaj input.nextInt do swojego inta.

next() w porównaniu do nextLine() nie pobiera spacji
komentarz 7 lipca 2016 przez Jonki Dyskutant (8,180 p.)

Prawie działa

public static boolean sprawdzanie_PINu(int r_PIN) throws FileNotFoundException, InterruptedException
	{
		Pliki pliki = new Pliki();
		
		pliki.wczytywanie_ilosci_klientow();
		
		String string_PIN;
		
		PIN = new int[ilosc_klientow];

		File plik = new File("uzytkownicy.txt");
		Scanner input = new Scanner(plik);
		
		int i = 0;
		System.out.println("1PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!");
		Thread.sleep(2000);
		while(input.hasNextLine())
		{
			string_PIN = input.next();
			System.out.println("2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!" + string_PIN);
			Thread.sleep(1000);
			
			if(string_PIN.equals("PIN:"))
			{
				System.out.println("3PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!" + string_PIN);
				Thread.sleep(1000);
				
				PIN[i] = input.nextInt();
				i++;
			}
		}
		
		input.close();
		System.out.println("4PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!");
		Thread.sleep(1000);
		for(int j = 0; j < ilosc_klientow; ++j)
		{
			if(r_PIN == PIN[j])
				return false;
		}
		System.out.println("5PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!");
		Thread.sleep(1000);
		return true;
	}

tylko gdy ma już wychodzić z pętli po ostatnim razie wywala takie coś :

1PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!ID:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!1
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Imie:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!wsqarwqr
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Nazwisko:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!qwrwer
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Rok
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!urodzenia:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!1997
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!PIN:
3PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!PIN:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Haslo:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!wqrwqerwq
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Stan
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!konta:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!0
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!ID:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!2
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Imie:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!wqarqwr
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Nazwisko:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!qwrqwr
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Rok
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!urodzenia:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!1997
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!PIN:
3PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!PIN:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Haslo:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!qwrwqrqwr
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!Stan
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!konta:
2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!0
Exception in thread "main" java.util.NoSuchElementException
	at java.util.Scanner.throwFor(Unknown Source)
	at java.util.Scanner.next(Unknown Source)
	at Sprawdzanie.sprawdzanie_PINu(Sprawdzanie.java:26)
	at Projekt.rejestracja(Projekt.java:188)
	at Projekt.main(Projekt.java:264)

komentarz 7 lipca 2016 przez Mr. Szanowny Bywalec (2,180 p.)
Ciekawa sprawa, jak przeczytałem to ten błąd wywala gdy chcemy czytać scanerem więcej linii których już nie ma w pliku. Pomyśle nad tym jeszcze i licze na pomoc kogoś bardziej doświadczonego :)
1
komentarz 7 lipca 2016 przez Mr. Szanowny Bywalec (2,180 p.)

Spróbuj zmienić while(input.hasNextLine()) na while(input.hasNext()). Coś takiego spróbuj:

public static boolean sprawdzanie_PINu(int r_PIN) throws FileNotFoundException, InterruptedException
    {
        Pliki pliki = new Pliki();
         
        pliki.wczytywanie_ilosci_klientow();
         
        String string_PIN;
         
        PIN = new int[ilosc_klientow];
 
        File plik = new File("uzytkownicy.txt");
        Scanner input = new Scanner(plik);
         
        int i = 0;
        System.out.println("1PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!");
        Thread.sleep(2000);
        while(input.hasNext())
        {
            string_PIN = input.next();
            System.out.println("2PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!" + string_PIN);
            Thread.sleep(1000);
             
            if(string_PIN.equals("PIN:"))
            {
                System.out.println("3PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!" + string_PIN);
                Thread.sleep(1000);
                 
               if(input.hasNextInt()){
                PIN[i] = input.nextInt();
                i++;}
            }
        }
         
        input.close();
        System.out.println("4PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!");
        Thread.sleep(1000);
        for(int j = 0; j < ilosc_klientow; ++j)
        {
            if(r_PIN == PIN[j])
                return false;
        }
        System.out.println("5PIN musi posiadac cztery cyfry i nie moze zaczynac sie od 0!");
        Thread.sleep(1000);
        return true;
    }

 

1
komentarz 7 lipca 2016 przez Jonki Dyskutant (8,180 p.)
Dzięki. Działa elegancko. Już wydawało mi się, że będę siedział nad tym problemem do jutra, ale na szczęście wiedziałeś co jest grane.
komentarz 7 lipca 2016 przez Mr. Szanowny Bywalec (2,180 p.)
Bardzo mi miło, że pomogłem bo sam się uczę javy i też mam z tym odczytywaniem problemy. Jeśli chodzi o ten problem to pętla sprawdzała dla linijek z spacjami, gdy da się hasNext() to sprawdza po każdym słowie bez spacji. My braliśmy tylko same słowa więc program mógł trochę głupieć gdy sprawdzał dla całych linii. Jeśli chodzi o tego dodatkowego if'a to on sprawdza czy po pinie jest jakis numer. Unikniesz problemów gdy zapomnisz ten pin w notatniku napisać.

Jesteś pierwszą osobą której pomogłem w programowaniu :)

Podobne pytania

0 głosów
3 odpowiedzi 1,982 wizyt
pytanie zadane 4 września 2017 w Java przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 158 wizyt
pytanie zadane 14 kwietnia 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)
0 głosów
3 odpowiedzi 1,368 wizyt
pytanie zadane 18 października 2018 w Java przez Virius Początkujący (490 p.)

92,570 zapytań

141,422 odpowiedzi

319,644 komentarzy

61,959 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!

...