Dublowanie tekstu przy poleceniu println w pętli for [Java]


(Lchrom) #1

Chciałem odświeżyć sobie pamięć z Javy i chciałem napisać program-wypożyczalnię filmów i już na początku natknąłem się na mały problem. Mianowicie, po wprowadzeniu ilości pozycji do zapisania mam pętlę for, która wykonuje procedurę przyjmowania imion (wiem, że na razie nie wprowadzam ich do tablicy, to potem zrobię) i kiedy teoretycznie wszystko jest w porządku to przy uruchomieniu programu wyświetla się dwa razy, jedno pod drugim "Wprowadź imię:" a tylko pod tym drugim mogę je wpisać.

Kod: 

import java.io.*;
import java.util.*;

public class revision {

	public static void main(String[] args) {
		String imie, nazwisko;
		Scanner odczyt=new Scanner(System.in);
		
		//wprowadzanie danych do tablic
		System.out.println("Podaj ile pozycji chcesz wprowadzić: ");
		int ilosc_pozycji=odczyt.nextInt();
		
		String[][]dane=new String[ilosc_pozycji][ilosc_pozycji];
		for(int i=0;i<=ilosc_pozycji;i++){
		System.out.println("Wprowadź imię:");
		imie=odczyt.nextLine();
		}
		
		System.out.print("Wprowadź nazwisko:");
		nazwisko=odczyt.nextLine();
	}

}

(Frankfurterium) #2

Metoda nextInt przyjmuje tylko i wyłącznie liczby całkowite. Enter, którym zatwierdzasz linię, nie wpasowuje się do wzoru i zalega w buforze. Automatycznie wskakuje do pierwszego z brzegu odczytu, do którego “się mieści”. Żeby to naprawić, możesz:

a) wstawić odczyt.nextLine() zaraz po int ilosc_pozycji=odczyt.nextInt();

b) wczytać ilość pozycji do Stringa i zrobićz niego inta (lepszy wybór, bo możesz wpleść walidację)

 

Kolejna sprawa techniczna - pętla wykonuje ci się o raz za dużo.

 

Sprawa nie techniczna - poczytaj zalecenia Oracla dotyczące formatowania kodu i konwencji nazewniczych. Twoja Java wygląda prawie jak C.


(Lchrom) #3

Ok, pomogło dzięki :wink: