Szkolenia programowania we Wrocławiu
Kurs Java Podstawy - rozszerzony

Rozwiązanie 1.10

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 ...

Komentarze

Komentarze zamknięte. Zapraszamy do grupy na Facebooku
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 :(");
}
}

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 ;)

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!

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.

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ą.

Adrian

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");

// . . .
}
}
}

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ę:
if("Basia".equals(imie) ||"Kasia".equals(imie))

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.
http://javastart.pl/podstawy-jezyka/operatory-matematycze-i-logiczne/
http://javastart.pl/efektywne-programowanie/javatraps-001/
Nie samą miłością człowiek żyje:
W google -> java porównanie albo java porównanie string.

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