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

Kompilator nie zczytuje danych od użytkownika, tylko od razu przechodzi do następnej instrukcji

VPS Starter Arubacloud
0 głosów
250 wizyt
pytanie zadane 19 lutego 2016 w Java przez NYC_fan Początkujący (260 p.)

Cześć,

kod:

import java.util.Scanner;

public class Kolejnyboolean {
	public static void main(String[] args){
		
		Scanner sc = new Scanner(System.in);
		
		String auto = ("tak");
		
		System.out.println("Ile masz lat");
		int wiek = sc.nextInt();
		
		System.out.println("Czy masz samochód?");
		String odp = sc.nextLine();
		boolean b = odp.equals(auto);
		
		System.out.println("podaj liczbę zmiennoprzecinkową");
		double liczba = sc.nextDouble();
		
		System.out.println(wiek);
		System.out.println(b);
		System.out.println(liczba);
		
		sc.close();
	}

}

Wydaje mi się, że program jest mega oczywisty dla mnie, ale nie rozumiem, dlaczego jak uruchomię to eclipse nie chce odemnie odpowiedzi na pytanie czy mam auto, tylko wyświetla kolejne pytanie o liczbę rzeczywistą.

pozdrawiam

1 odpowiedź

0 głosów
odpowiedź 19 lutego 2016 przez Javowiec Pasjonat (21,560 p.)
wybrane 19 lutego 2016 przez NYC_fan
 
Najlepsza

Jeżeli chcesz odczytać napis ze Scannera po tym jak wcześniej odczytywałeś liczbę, musisz wczytać jeszcze znak nowej linii. Wczytywanie liczby polega na wczytaniu samej liczby. Nie wczytuje się wtedy enter, który wciskasz po zatwierdzeniu, dlatego przed wczytaniem napisu musisz wczytać ten enter:

System.out.println("Ile masz lat");
int wiek = sc.nextInt();
sc.nextLine();
komentarz 19 lutego 2016 przez NYC_fan Początkujący (260 p.)

Ja jeszcze do końca nie rozumiem, co daje nam ta dopisana linijka sc.nextLine();.

Czyli skaner jakoś do swojej pamięci przypisuje, że będzie brał same zmienne typu pierwszej zmiennej, którą pobieram, a poźniej ja przy każdej zmiennej innego typu muszę dodąć sc.nextLine(); Trochę to dziwne

komentarz 19 lutego 2016 przez Javowiec Pasjonat (21,560 p.)

Jak wczytujesz liczby to skaner wczytuje tylko liczbę. Nie wczytuje entera, który wcisnąłeś, aby zatwierdzić tę liczbę (bo enter nie jest liczbą, tylko Stringiem).

Przy wczytywaniu tekstu jest inaczej. Skaner wtedy wczytuje enter, który wciśniesz.

Enter to inaczej znak nowej linii.

Przy Twoim wcześniejszym kodzie sytuacja wyglądała następująco:

  1. Wyświetla się pytanie "Ile masz lat?".
  2. Wpisujesz liczbę i klikasz enter.
  3. Enter, czyli znak nowej linii nie został wczytany do skanera, ponieważ jest Stringiem, więc przy następnym wywołaniu metody nextLine() wczyta go automatycznie.
  4. Wyświetla się pytanie "Czy masz samochód?" i skoro została wywołana metoda nextLine() to do zmiennej odp zostaje z automatu wczytany znak nowej linii.
  5. Wyświetla się polecenie "podaj liczbę zmiennoprzecinkową".

Skaner tak działa, więc musisz o tym pamiętać, że między wczytaniem liczby a napisu musisz jeszcze wywołać raz metodę nextLine().

Do inta nie możesz przypisać zarówno liczby jak i stringa. Przypisywany jest tylko int.

komentarz 19 lutego 2016 przez NYC_fan Początkujący (260 p.)
Dziękuje, teraz już wszystko rozumiem

Podobne pytania

+3 głosów
3 odpowiedzi 409 wizyt
pytanie zadane 19 października 2021 w Java przez ptomeccc Użytkownik (800 p.)
0 głosów
2 odpowiedzi 2,252 wizyt
pytanie zadane 1 czerwca 2017 w Java przez Gambr Dyskutant (7,530 p.)
0 głosów
1 odpowiedź 208 wizyt
pytanie zadane 13 lutego 2017 w Java przez Wolfy Nowicjusz (180 p.)

92,975 zapytań

141,938 odpowiedzi

321,181 komentarzy

62,302 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...