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

Java pętla for

Object Storage Arubacloud
0 głosów
697 wizyt
pytanie zadane 23 lutego 2017 w Java przez drag2 Nowicjusz (170 p.)

Witam, parę dni temu zacząłem przygodę z Javą i mam jeden mały problem. W pętli for pytam o imiona uczestników, ale omija ona pytanie o pierwszego i zaczyna od drugiego...Ktoś pomoże?

import java.util.Scanner;

public class Tablice3 {

	public static void main(String[] args) {
		Scanner odczyt = new Scanner(System.in);

		System.out.println("Podaj ilosc uczestnikow: ");
		int uczest = odczyt.nextInt();

		String[] tablica = new String[uczest];

		for (int i=0; i<tablica.length; i++) {

			System.out.println("Podaj imie uczestnika:");
			tablica[i] = odczyt.nextLine();

		}
		for (int i = 0; i<tablica.length; i++) {
			System.out.println("Imie " + (i + 1) + " uczestnika: " + tablica[i]);
		}
		odczyt.close();
	}

}

 

2 odpowiedzi

+1 głos
odpowiedź 23 lutego 2017 przez ShiroUmizake Nałogowiec (46,300 p.)
wybrane 23 lutego 2017 przez drag2
 
Najlepsza
Jak najbardziej to działa. Zauważ:

Zaczynamy pętle.

  System.out.println("Imie " + (i + 1) + " uczestnika: " + tablica[i]);

0+1 = 1 Czyli imię(1) uczestnika to "jakieś imię" . Nie ominął zera, tylko tu popełniłeś błąd. Inaczej mówiąc odczytał tablice o indeksie 0, a ty to interpretowałeś jako 1. Musisz pamiętać, że tablica są odczytywane od zera (dlatego i=0). Czyli dla 3 uczestników (długość 2)

Uczestnik[0] = Imię (1)

Uczestnik[1]=Imię (2)

Uczestnik[2] = Imię (3)

Usuń i+1 a dostaniesz prawidłową odpowiedż.
komentarz 23 lutego 2017 przez drag2 Nowicjusz (170 p.)
Zapomnijcie o wypisywaniu. Jak usunę drugą pętlę for to mam taki sam problem. Wyskakuje mi od razu 2 razy

Podaj imie uczestnika:

Podaj imie uczestnika:
komentarz 23 lutego 2017 przez ShiroUmizake Nałogowiec (46,300 p.)
Dobra mam już rozwiązanie.

Dodaj oczyt.nextLine po odczyt.nextInt. Dlaczego?

Bo enter jest również znakiem, i pcha go do bufora przez co JAVA żle to interpretuje.
komentarz 23 lutego 2017 przez drag2 Nowicjusz (170 p.)
Mógłbyś dokładnie napisać co w którym miejscu, bo próbuję to wpisać na różne sposoby i nie działa...
komentarz 23 lutego 2017 przez ShiroUmizake Nałogowiec (46,300 p.)

Podam ci moje rozwiązanie:

  Scanner odczyt = new Scanner(System.in);
        System.out.println("Podaj ilosc uczestnikow: ");
        int uczest = odczyt.nextInt();
        odczyt.nextLine(); // wyrzucam enter. (TO NIE INT!)
 
        ArrayList<String> list = new ArrayList<String>();
        
        int i = 0;
        while (i < uczest){
        System.out.print("Podaj imie uczestnika:");
            String imie = odczyt.nextLine();
            list.add(imie);
            i++;
        }
        for (int c = 0; c < list.size(); c++){
            System.out.println(list.get(c));
        }

To jest zrobione na liście, ale bez problemu przerobisz na tablice.

komentarz 23 lutego 2017 przez drag2 Nowicjusz (170 p.)
Dzięki wielkie już działa :)
komentarz 23 lutego 2017 przez Nadann Początkujący (290 p.)
Mozna tez przed petla for dodac  Scanner input=new Scanner(System.in); a w srodku samej petli zmienic na tablica[i]= input.nextLine(); i wtedy nie przeskakuje o jeden i wyswietla poprawnie. Mysle,ze moje rozwiazanie jest malo ciekawe, ale zadzialalo ;) Oczywiscie to powyzej jest duuuzo bardziej eleganckie :)
0 głosów
odpowiedź 23 lutego 2017 przez KubenQPL Maniak (62,820 p.)
Bo wypisujesz i+1 a nie i, tablica jest indeksowana od 0
komentarz 23 lutego 2017 przez drag2 Nowicjusz (170 p.)
Chodzi mi o wpisywanie, a nie wypisywanie. Zrobiłem tam i+1 żeby było "Imie 1 uczestnika" a nie "Imie 0 uczestnika"/
komentarz 23 lutego 2017 przez KubenQPL Maniak (62,820 p.)
Scanner po nextInt() nie przechodzi do nowej lini

Dodaj po nextInt() samo odczyt.nextLine() no i potem ta pętla wczytująca

Podobne pytania

0 głosów
1 odpowiedź 731 wizyt
pytanie zadane 19 sierpnia 2020 w C i C++ przez hakiri Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 711 wizyt
+2 głosów
1 odpowiedź 591 wizyt
pytanie zadane 9 lipca 2020 w C i C++ przez nanautzin Obywatel (1,510 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

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

...