Imiona wybrańców
Spis treści
Zadanie
Napisz program, który pobierze od użytkownika imię i przechowa je w zmiennej. Następnie stwórz kilka warunków z różnymi imionami. Jeśli któreś z imion będzie pasowało wyświetl "Cześć jakieś_imię", gdy program nie znajdzie imienia wyświetl "Przykro mi, ale Cię nie znam".
Rozwiązanie
import java.util.Scanner;
public class Odczyt {
public static void main(String[] args) {
Scanner odczyt = new Scanner(System.in);
System.out.println("Podaj jakieś imię: ");
String imie = odczyt.nextLine();
if ("Maciek".equals(imie)) {
System.out.println("Cześć " + imie);
} else if ("Kasia".equals(imie)) {
System.out.println("Cześć " + imie);
} else {
System.out.println("Przykro mi, ale Cię nie znam");
}
}
}
Przykład podobny do poprzedniego jednak należało przede wszystkim uważać, aby porównywać ciągi znaków, przy pomocy metody equals(), a nie operatora ==.
Dodatkowo warto zwrócić uwagę na to, że metodę tą możemy wywołać bezpośrednio na rzecz obiektu typu String, na przykład "Maciek".equals(...). Dlaczego powinniśmy używać takiego zapisu, a nie odwrotnego, czyli imie.equals("Maciek")? Pozwoli to uchronić się przed nieprzyjemnym błędem NullPointerException. Jeśli zmienna imie nie byłaby zainicjowana wtedy próbowali byśmy wywołać metodę na rzecz pustej referencji, co jest karygodnym błędem co omówimy w przyszłości ...
Dyskusja i komentarze
Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.
Poniżej znajdziesz archiwalne wpisy z czasów, gdy strona była jeszcze hobbystycznym blogiem.
YeeeZooo
Zrobiłem to troszkę inaczej, może komuś się przyda ;) import java.util.Scanner; public class TWar1{ public static void main(String[] args){ System.out.println("podaj imie"); String imie = (new Scanner(System.in).nextLine()); if (imie.equals("slawek")) System.out.println("Czesc Slawek :)"); else System.out.println("Nie znam cie :("); } }
Normi
Myśle, że nie ktoś, a bardzo dużo ktosiów :D Pozdro, dzieki za to co robisz :)
Zbyszek
W przypadku „slawek”.equals(imie.toLowerCase()); imię trzeba napisać z małej litery, żeby zadziałało i z małej i z wielkiej.
shaftpl
rok pozniej: niedawno tu trafilem, Strona jest rewelacyjna! Dzieki!
Slawek
Tak jak napisałem bezpieczniej jest wywoływać metodę equals() na obiekcie, który jesteśmy pewni, że zostanie poprawnie zainicjowany, czyli "slawek".equals(...). Można dodać jeszcze taki bajer, żeby się uchronić przed różną wielkością liter: "slawek".equals(imie.toLowerCase()); lub jeszcze fajniejsze: "slawek".equalsIgnoreCase(imie); Cieszę się, że jednak ktoś korzysta ze strony ;)
Robert
A czy na switch'u można tylko int'y sprawdzać?
Slawek
Niestety switch działa tylko na intach (lub char, bo t w sumie to samo), lub enum. Na szczęście w Javie 7 będzie wprowadzony String w switchu.
Adrian
<code>import java.util.Scanner; public class code19b { public static void main(String[] args) { Scanner getName = new Scanner(System.in); System.out.println("Podaj imie: "); String name = getName.nextLine(); switch(name) { case "Adrian": System.out.println("Witaj " + name); break; default: System.out.println("Witaj nieznajomy"); // . . . } } }</code>
Paweł
Przeczytałem początek tego postu i myślę sobie, jak to nie można String jak ja przed chwilą ten program zrobiłem używając Switch Case. Dopiero później zauważyłem, że zostanie wprowadzony w Java 7, z której aktualnie korzystam. Przy okazji, świetny kurs, szkoda że ma Pan tylko z Java, bo Pana kursy świetnie uczą.
Mayson
Witam, Czy dozowolona jest konstrukcja z LUB (czyli: |) tak jak to sobie wymyśliłem poniżej: ... if (imie.equals(imie2) | imie.eqauals(imie3)) ...
elop
Pod warunkie ze umieścisz znak || a nie | :)
elop
Chociaż to nie do końca.. jak pisał autor (powyżej)... lepiej zachować taką konwencję: <code>if("Basia".equals(imie) ||"Kasia".equals(imie))</code>
mrJaros
To samo z zastosowaniem tablic: public static void zad110(){ Scanner skaner = new Scanner(System.in); System.out.println("Podaj swoje imię w celu sprawdzenia, czy Cię znam: "); String podaneImie = skaner.nextLine(); String znane[] = {"Jarek","Michał","Radek","Damian","Wojtek","Tomek","Konrad"}; int ilosc = znane.length; boolean znaleziono = false; for(int i = 0; i < ilosc; i++){ if(podaneImie.equals(znane[i])){ znaleziono = true; } } if(znaleziono == true){ System.out.println("Witaj, "+podaneImie); }else{ System.out.println("Sorry, "+podaneImie+", ale Cię nie znam!"); } }
Rafał
Mi polskich liter nie czyta tzn jak wpisalem Rafał to sie buraczy a jak Rafal to jest ok. Czy jest to gdzieś konfigurowalne przy kompilacji czy w innych ustawieniach? coś na zasadzie html ?
Kuba
Witam wszystkich jestem tu nowy, napisałem program do powyższego zadania, lecz chciałem aby program pobrał najpierw imię potem nazwisko i dopiero rozpoznawał użytkownika. A tak się nie dzieje, proszę o podpowiedz co trzeba zmienić import java.util.Scanner; public class Test{ public static void main(String[] args){ String imie; String nazwisko; Scanner nazwa = new Scanner(System.in); System.out.println("Prosze podac swoje imie"); imie = nazwa.nextLine(); System.out.println("Prosze podac swoje nazwisko"); nazwisko = nazwa.nextLine(); if("Marek Nowak".equals(imie+nazwisko)) System.out.println("Witaj Marek Nowak masz pelen dostep do programu"); else if("Kamil Klepacki".equals(imie+nazwisko)) System.out.println("Witaj Kamil Klepacki masz pelen dostep do programu"); else System.out.println("Niestety jestes osoba nie upowazniona"); } }
gandy
Kuba - zerknij na cudzysłowy - one w każdym przypadku( zarówno początek jak i koniec muszą byc górne tj. nie „Kamil Klepacki” tylko "Kamil Klepacki" . Poza tym zamiast linii typu if(„Marek Nowak”.equals(imie+nazwisko)) trzeba zastosować if("Marek Nowak".equals(imie +" " +nazwisko) // ze względu na spację zaraz za imieniem Marek.
gandy
Sorry zgubiłem zamknięcie nawiasu w warunku następującym za if
gandy
Widzę,że cudzysłowy to po prostu automat przerabia i pewnie miałeś dobrze więc pewnie o tę spację chodzi. U mnie działa.
Joligarcon
W twoim rozwiązaniu nie ma już po warunku if otwierającej klamry i zamykającej po instrukcjach.Możesz powiedzieć z czym jest to związane?U mnie kompiluje się zarówno z klamrami jak i bez.
Slawek
bez klamer wykonywana jest tylko instrukcja bezpośrednio po warunku, to co jest dalej jest jako zwykła dalsza część kodu. Jeżeli chcesz wykonać kilka operacji w warunku to klamry już musisz dodać.
Miki
ehh.. nie potrafie zrozumiec na jakiej zasadzie to dziala .. ;/ Ktos moglby mi wytlumaczyc ? :<<
Grzegorz
ale co, postaram się pomóc :)
Nick
sorki ale nie każdy zna biegle angielski żeby tamto czytać na brałem z == ;p
Adrea
POmocy, jak robie run to mam bład:C Exception in thread "main" java.lang.UnsupportedClassVersionError: pl/adrenator/odczyt : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Maxxx
podaj kod może pomożemy
lipaskc
A w tą stronę warto porównywać? if(imie.equals("Kamil")) System.out.println("Czesc Kamil"); bo w przykładzie było na odwrót
Sławek Ludwiczak
generalniej bezpieczniejsze jest wywołanie metody equals na obiekcie co do którego masz 100% pewności, że istnieje, czyli jeśli masz "Maciek" w kodzie - to ten obiekt tam jest, natomiast jeśli masz zmienną String imie; - to to imię może nie zostać poprawnie zainicjowane i wywołanie equals na takiej metodzie może wyrzucić wyjątek NullPointerException
Kuba
import java.util.Scanner; public class SprawdzImie { public static void main(String[] args){ Scanner odczyt = new Scanner(System.in); System.out.println("Podaj swoje imię: "); String imie = odczyt.nextLine(); switch(imie){ case "Kuba": System.out.println("Cześć " + imie); break; case "Ania": System.out.println("Cześć " + imie); break; default: System.out.println("Przykro mi, ale Cię nie znam"); } } }
Chujnia
if("Maciek".equals(imie)) super kurwa, gdzie podałeś w tym jebanym poradniku, że trzeba używać jakiegoś gówna equals? Bo raczej nie w tym. NIE POZDRAWIAM.
Piotr
Jestem dopiero na tym etapie.
Mr_Fi
I się nie unoś. Nie masz powodu obrażać autora szczególnie że szeroko się rozpisał na temat istoty .equals() Nikt nie zmusza Cię do korzystania z poradnika. Kultury trochę... eh -.-'
Janosch
Temu Panu już podziękujemy!
Jaro
Przyjacielu! Zajrzyj do "Podstawy języka java" i tam masz,jak byk, rozdział " Operatory matematycze i logiczne" z opisem i przykładem zastosowania equals . A ja pozdrawiam Jaro
Janosch
A oto moja wersja, która sprawdza imię niezależnie od wielkości liter i zawsze w wyniku podaje imię w formie Pierwsza litera zawsze duża, reszta mała. Taka zabawa ze stringami. http://forum.javastart.pl/Thread-Instrukcje-steruj%C4%85ce?pid=985#pid985