Wątek przeniesiony 2015-06-06 19:34 z Java przez bogdans.

Wprowadzanie i odczytywanie numeru z użyciem if

0

Cześć! Mój problem jest dość prosty i pewnie co bardziej doświadczonym nie zajmie długo, żeby mi odpowiedzieć. Otóż od tygodnia bawię się w Javie za przewodnictwem książki Schildta dla początkujących (dlatego błagam, abyście spróbowali wyobrazić sobie siebie na samym początku kariery i przekazali mi wyjaśnienie w idiotoodporny sposób :)), aż w końcu doszliśmy do odczytywania danych wpisywanych z klawiatury. W przykładzie na literach, z użyciem char, nie było problemów, również komenda else działa poprawnie (sorry, jeśli coś mieszam terminologię, ale na moim etapie chyba nie jest to aż tak istotne). Sam jednak zawsze staram się próbować rozwiązać potem podane zadania w sposób alternatywny, z użyciem innych danych, aby sobie utrwalić – dotychczas działało to dobrze, ale niestety natrafiłem na ścianę, kiedy postanowiłem zmodyfikować ten algorytm, aby przedstawiał cyfry, a nie litery.

public class numer {

	public static void main(String[] args)

	throws java.io.IOException {

		int a = 660;

		int b;

		System.out.println ("Wprowadź mój numer telefonu!");

		b = (int) System.in.read();

		if (a == b) { System.out.println("Jest dobrze!" ); }

		else { System.out.println ("Jest źle!"); }


	}
	}

No i się zaczęło szaleństwo. Eclipse co prawda nie uniemożliwia mi wystartowania programu, ale na wpisywane znaki reaguje zupełnie przypadkowo. W powyższym układzie wpisanie "660" kończy się komunikatem "Jest źle!". Jeżeli trochę to zmienię, każdą liczbę zacznie opisywać jako "Jest dobrze!". Raz nawet zdarzyło mi się (niestety nie zapisałem tego algorytmu), że na poprawne liczby reagował "źle", a na niepoprawne "dobrze". Ani razu nie zadziałał tak, jak tego się po nim spodziewałem.

Pomimo najszczerszych wysiłków nie dowiedziałem się, dlaczego coś, co tak bezproblemowo działa z char, nie radzi sobie z int – i to jeszcze nawet nie zdaje sobie sprawy, że sobie nie radzi (Eclipse, jak wspomniałem, nie donosi o błędach). Próbowałem też innych typów: byte, long, również boolean – ten ostatni zwraca błąd, że nie można rzutować z int do boolean, choć kompletnie już nie rozumiem, jak to ma działać, bo w innych algorytmach jakoś nie ma tego problemu. Jednym słowem, zasady rządzące rzutowaniem nadal są dla mnie dość mgliste.

O co więc Was proszę: o wskazanie, w którym miejscu w tym algorytmie popełniam błąd. Może chodzi tu o te clustery (nienawidzę ich!), może jakiś powinien iść w inne miejsce? Nie wiem. Zwracam też uwagę, że doskonale zdaję sobie sprawę, że mógłbym po prostu użyć innej metody albo jeszcze innej zmiennej albo czegokolwiek, ale na chwilę obecną po prostu chcę wiedzieć, dlaczego tutaj to nie działa, chociaż z char nie ma problemu. Inaczej nie da mi to spać w nocy. :)

Z góry dzięki. Jak pisałem, będę wdzięczny za w miarę zwięzłe, proste, a przede wszystkim wyrozumiałe odpowiedzi, bo naprawdę jestem totalnym żółtodziobem (dla którego książka Schildta, jak się okazuje, chyba jednak nie jest najlepsza, bo z treści wynika, że wcale nie jest ona skierowana do, jak chce wstęp, osoby "bez jakiegokolwiek doświadczenia w programowaniu" – mimo to póki co jakoś sobie z nią radzę, więc wolałbym na razie się jej trzymać i nie kupować nowego podręcznika). ;)

0

Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. Zamiast System.in.read tego użyj klasy Scanner

@Edit w skrócie ta metoda z strumienia wejściowego wczytuje tylko jeden bajt, a liczba która zapisujesz w takowym(1 bajcie) się nie zmieści.

0

Czyli jeśli dobrze rozumiem, żadna cyfra ani liczba nie zmieści się w jednym bajcie (oczywiście próbowałem już redukować swój "numer" do "6"), żeby ten sposób zadziałał? Tylko litery wchodzą w grę?

1

Skorzystaj z klasy Scanner, swoim sposobem nie odczytujesz liczby wpisanej przez użytkownika, ale kod ASCII pierwszego wpisanego znaku (49 dla 0, 50 dla 1,...)

1 użytkowników online, w tym zalogowanych: 0, gości: 1