Kurs Java Podstawy - rozszerzony

Instrukcje sterujące

Języki programowania, a także i Java na niewiele by się nam przydała, gdyby nie istnienie instrukcji sterujących, czyli po prostu instrukcji wyboru. Zasadniczo w Javie mamy ich dwa rodzaje:

  • Instrukcja if
  • Instrukcja switch

Pierwsza działa tak jak brzmi (z ang. if=jeżeli). Instrukcja ta sprawdza warunek i jeśli jest on prawdziwy to wykonywane są instrukcje w jej ciele, jeśli nie to są pomijane. Możemy również skorzystać ze słowa else, które pozwoli na wykonanie innych instrukcji w wypadku, gdy warunek jest fałszywy. Schemat wygląda następująco:

if(warunek){
  instrukcje, gdy warunek jest prawdziwy
}
else{
  instrukcje, gdy warunek jest fałszywy
}

Instrukcje if możemy dowolnie zagnieżdżać, należy jedynie pamiętać o zamykaniu otwartych nawiasów klamrowych, które można pominąć w wypadku, gdy instrukcja do wykonania to tylko jedna metoda, przypisanie, czy utworzenie obiektu.

if(warunek){
  if(warunek2)
    jakaś_metoda();
  else
    jakaś_metoda2();
}
else{
  instrukcje, gdy warunek jest fałszywy
}

Mamy także do dyspozycji instrukcje if ... else if ..., działanie jest podobne, jednak pozwala na rozróżnienie kilku przypadków.

if(warunek1){
  instrukcje, gdy warunek1 jest prawdziwy
}
else if(warunek2{
  instrukcje, gdy warunek2 jest prawdziwy, a warunek1 fałszywy
}

W powyższym przykładzie jeżeli warunek1 nie zostanie spełniony, program sprawdzi warunek2, jeśli ten też to żadne metody nie zostaną wywołane.

Ostatni schemat można także zamienić na wygodniejszy sposób, który jest wygodny na przykład przy tworzeniu prostego menu wyboru na podstawie kilku liczb.

switch(liczba){
  case 1:
    jakieś_instrukcje_1;
    break;
  case 2:
    jakieś_instrukcje_2;
    break;
  ...
  default:
     instrukcje, gdy nie znaleziono żadnego pasującego przypadku
}

Jako parametr podajemy liczbę całkowitą, a następnie sprawdzane są kolejne przypadki, jeśli liczba==1 to wykonane zostaną jakieś_instrukcje1, jeżeli liczba==2, to jakieś_instrukcje2 itd. Należy tutaj szczególną uwagę zwrócić na instrukcję przerywającą break, która powoduje przerwanie wykonywania bloku case. Jej pominięcie spowoduje, że wykonane zostaną także wszystkie instrukcje znajdujące się poniżej, bez względu na to, czy będą pasowały do zmiennej liczba, czy też nie. Po słowie kluczowym default następują instrukcje, które mają się wykonać, jeżeli żaden z przypadków nie będzie pasował do parametru. Umieszczanie bloku default nie jest obowiązkowe. Instrukcję switch można sobie wyobrazić tak:

if(liczba==1)
  jakieś instrukcje 1
else if(liczba==2)
  jakieś instrukcje 2
...

Poniżej praktyczny przykład wykorzystania instrukcji sterujących.

public class TestIf{
  public static void main(String[] args){
	  int zmienna = 5;
	  if(zmienna%2 == 0)
		  System.out.println("Liczba parzysta");
	  else
		  System.out.println("Liczba nieparzysta");

	  if(zmienna>10)
		  System.out.println("Liczba większa od 10");
	  else if(zmienna>0 && zmienna<=10)
		  System.out.println("Liczba dodatnia mniejsza, lub równa 10");
          else
                  System.out.println("Liczba ujemna");
  }
}

Pod zmienną typu int przypisujemy dowolną liczbę mieszczącą się w zakresie. Następnie w sprawdzamy, czy wynik dzielenia modulo tej liczby przez 2 daje w wyniku 0, jeśli tak to wyświetlamy napis, że liczba jest parzysta, w przeciwnym wypadku wyświetlamy komunikat przeciwny. Następnie sprawdzamy kolejno liczba jest większa od 10, lub jednocześnie większa od 0 i mniejsza, bądź równa 10, lub czy jest mniejsza od 0. W naszym przykładzie na ekranie pojawi się, że liczba jest nieparzysta i dodatnia mniejsza bądź równa 10. Sprawdź zachowanie programu z inną liczbą.

public class TestSwitch{
  public static void main(String[] args){
	  int zmienna = 3;

	  switch(zmienna){
	  case 1:
		  System.out.println("Liczba to 1");
		  break;
	  case 2:
		  System.out.println("Liczba to 2");
		  break;
	  default:
		  System.out.println("Liczba to ani 1, ani 2");
	  }
  }
}

W tym przykładzie po prostu sprawdzamy, czy liczba jest równa 1, lub 2, jeśli nie to wyświetlamy inny komunikat. Po bloku default nie musimy umieszczać przerwania break.

Zadania do samodzielnego wykonania:

1.9 Pobierz w konsoli dwie liczby całkowite, następnie porównaj je i wyświetl stosowny komunikat z wynikiem.

Rozwiązanie.

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

<- Poprzednia LekcjaNastępna Lekcja ->

Komentarze

Robert

Oooo, zamieniłeś stronami sidebar i pole artykułów :)

postep

blad w trzecim kodzie w czwartej linijce brakuje nawiasu ")" przed "{"

Kamil

Hmm instrukcja switch działa tylko z liczbami? (zmienne int itp.) Jak robię zmienną String, to wyskakuje mi komunikat, że program oczekuje int.

Slawek

Dokładnie, można użyć typów byte, short, char, lub int (czyli ogólnie int), ewentualnie typu wyliczeniowego Enum.

Normi

Czyżby?

Takie coś działa:


import java.util.Scanner;

public class Switch {
public static void main(String[] args)
{
String imie;
Scanner odczyt = new Scanner(System.in);

System.out.print("Podaj imie: ");
imie = odczyt.nextLine();

switch(imie)
{
case "tomek":
System.out.println("Hehe!");
break;

default:
System.out.println("D:D:D:D");
}
}
}

Slawek

zapewne posiadasz już Javę w wersji 7, więc działa :)

Normi

Tak, 7 :P

Michał

Hej, co jest tu źle?

import TerminalIO.KeyboardReader;

public class Kalkulator{
public static void main(String[] args){
int a, b , c;

KeyboardReader reader1 = new KeyboardReader();
KeyboardReader reader2 = new KeyboardReader();
KeyboardReader reader3 = new KeyboardReader();

a=reader1.readInt("podaj a");
b=reader2.readInt("podaj b");
c=reader3.readInt("podaj c");

System.out.print("a+b="+(a+b));
}
}

Michał

eh, wybaczcie, to miało być iść do tematu "operatory matematyczne". Nie wiem, jak usunąć.

Paulia

Dlaczego nie dziala w takiej postaci??
import java.util.Scanner;

public class if{
public static void main(String[] args){

Scanner odczyt = new Scanner(System.in);
String imie = odczyt.nextLine();
System.out.println("Podaj"+imie);

if("Paulina".equals(imie))
Systsem.out.println("Hej"+imie);
else if("Pawel").equals(imie))
Systsem.out.prinln("Hej"+imie);
else Systsem.out.prinln("nie znam Cie fakju");
}
}

Slawek

Pytanie "podaj imię" powinno być raczej przed jego wczytaniem. Później w warunkach (else if("paweł" ...) źle powstawiane nawiasy.
Do tego warunek if ... else możesz zrobić w formie:
if("Paulina".equals(imie) || "Pawel".equals(imie)) {
} else { }

Paulia

ok dziękuje :)

TechLuk (zielony)

Mógł by mi ktoś pomóc :)?
Nie wiem jaki tutaj jest błąd.
public class Menu{
public static void main(String[] args){
int zmienna = 3;

switch(zmienna){
System.out.println("Wcisnij liczbe 1 lub 2");
case 1:
System.out.println("Wcisnales liczbe 1");
break;
case 2:
System.out.println("Wcisnales liczbe 2");
break;
default:
System.out.println("Nie wcisnales liczby 1 ani 2");
}
}
}

Error: case, default or '}' expected

TechLuk (zielony)

Generalnie już z problemem se poradziłem, lecz jak odpalam w cmd to mi pokazuje "Wciśnij liczbę 1 lub 2" i od razu potem "nie wcisnąłeś żadnej liczby". W ogóle nie da czasu na wciśnięcie. Czy powie mi ktoś jak to naprawić?

Slawek

od tego co tutaj wkleiłeś do wprowadzania danych od użytkownika jeszcze daleka droga :) Twój kod nie ma ani linijki kodu odpowiedzialnej za odbieranie danych, więc po wyświetleniu od razu się kończy.

Adam

Mam ten sam problem co kolega wyżej :( Może mi ktoś wskazać błąd?

import java.util.Scanner;

public class Kalkulator10{
public static void main(String[] args){

double a;
double b;
String c;
Scanner odczyt = new Scanner(System.in);


System.out.println("Podaj pierwsza liczbe");
a = odczyt.nextDouble();
System.out.println("Podaj druga liczbe");
b = odczyt.nextDouble();
System.out.println("Jaka operacje chcesz wykonac?");
c = odczyt.nextLine();

switch(c)
{
case "dodawanie":
System.out.println(a+"+"+b+"="+(a+b));
case "odejmowanie":
System.out.println(a+"-"+b+"="+(a-b));
case "mnozenie":
System.out.println(a+"*"+b+"="+(a*b));
case "dzielenie":
System.out.println(a+"/"+b+"="+(a/b));
break;



}
}
}

Witek

Witam
W następnej lekcji o pętlach masz podany program (Plan_Dnia_Do_Wchile) o planie dnia zobacz jak jest zrobiony i możesz go przerobić na kalkulator.

Adam

Ok, napisałem już jako-taki kalkulator. Jedynym mankamentem jest to, że gdy do zmiennej "c", typu int, która jest operacją (1-dodawanie, 2-odejmowanie itd.) to wszystko działa. Ale, gdy chcę zmienną "c" jako String, by nie trzeba było pisać tych 1, 2... to nie działa... Po prostu konsola nie czeka na wpisanie danych, tylko od razu kontynuuje działanie.

Witek

Witam
"String" w switch’u działa od wersji java7

Adam

Mam javę7. A działa w if?

Witek

Witam
Ściągnąłem sobie jave7 ponieważ chciałem zrobić przykład kolegi Normi, ale niestety u mnie NIE działa jest błąd w switch’u(imie) podkreśla imie na czerwono i dostaje taki kominikat
“Cannot switch on a value of type String. Only convertible int values or enum constants are permitted”, ponoć Stringi w Switch'u też miałybyć obsługiwane.

Ps. pozostałe programy działają.


import java.util.Scanner;

public class Switch_Imie {

public static void main(String[] args){

String imie;
Scanner odczyt = new Scanner(System.in);

System.out.print("Podaj imie: ");
imie = odczyt.nextLine();

switch(imie) { // TU JEST BŁĄD !!!
case "tomek":
System.out.println("Hehe!");
break;

default:
System.out.println("D:D:D:D");
}


}
}




Adam

Mam to samo.

Piotr


Scanner in = new Scanner(System.in);
String imie = in.nextLine();

switch(imie){
case "tomek":
System.out.println("Nie znam Cię!");
case "piotr":
System.out.println("Znam Cię :)");
default:
System.out.println("Daj spokój tato!");
}


Korzystam z NetBeans IDE 7.0.1
W ustawieniach projektu należy zmienić platformę z której korzysta java (domyślnie 1.6) na JDK 1.7
Następnie "Clean and Build" project i działa :)

Piotr

oczywiście trzeba pamiętać o instrukcjach "break" ^_^""

A co do javy to naukę lepiej zacząć od wersji x86 niż x64, bo jest po prostu łatwiej bawić się w ustawieniach ;)

Witek

Witam
Korzystam z Eclips’e , u mnie ustawienia projektu są na JDK 1.7, następnie po zaznaczeniu pliku Swith_Imie.java i wybieraniu Project -> Clean i Clean projects selected below i zaznaczeniu Projecktu z tym plikiem , wciśnięciu OK. i uruchomieniu nadal jest to samo. W Eclipsi’e nie znalazłem „Clean and Build” , chyba , że gdzieś to przeoczyłem. Program nie działa

Piotr

Hej :)
Sprawdziłem - działa pod eclipse, kwestia ustawień ;)
Ja tworzyłem projekt w taki sposób:
1. New project -> Java Project
2. Nazwa : dowolna
3. Sekcja JRE:
-> Use an execution environment JRE : JavaSE-1.7
-> klikamy "Configure JREs..."
4. Sekcja "Compiler"
-> "Compiler compliance level:" 1.7
5. Sekcja "Installed JREs"
-> "Add" -> "Standard VM" -> "JRE home:" klikamy "Directory" -> podajemy ścieżkę do "jre7"
6. Zatwierdzamy wszystko i p a m i ę t a m y o zaznaczeniu świeżo dodanego jre7
7. klikamy OK i Finish (projekt)
8. kopiujemy kod (dodajemy instrukcje break) i odpalamy.

U mnie ruszyło za pierwszym razem :)

Pozdrawiam,
Piotr

Witek

Słuchaj w sekcji Compilance level mam do wyboru tylko do 1.6, choć mam zainstalowaną versję 7.0. Scieżka dostępu jest ustawiona na jdk1.7.0\bin, sprawdziłem w konsoli wersję jaką mi wyświetli i jest prawidłowa. Tak samo mam w Eclips - Pulsar i Indigo. Możesz mi powiedzieć jak mam to ustawić. Z góry dziękuję.

Piotr

jaki masz system operacyjny? 32-bit czy 64-bit? Jaka wersja javy: 32 czy 64? Mój opis dotyczy wersji 32-bit.

Witek

Witam

Zainstalowaną mam Java7 windows –i586.exe pod systam XP – 32 bity. Problem u mnie polega na tym, że mam tam do wyboru od 1.3 do 1.6 w wersji Indigo i wersji Pulsar-Helios, pomimo, że do każdego Projektu javy dołączany jest JRE System Library[JavaSE-1.7], a mimo to nie mogę tego uruchomić. Przypuszczam , że te wersje Eclips mogą po prostu tej aplikacji nie obsługiwać, dlatego ściągam sobie nową wersję Eclips 3.7.1 i zobaczę czy będzie to samo działo się z tym programem co w poprzednich wersjach. Pozdrawiam.

Witek

Dzięki za podpowiedź

Witek

Witam
Problem został już rozwiązany, przykład się uruchamia.
Osoby, które używają starszej wersji Eclipse Indigo 3.7 .
Powinny zmienić ją na nowszą wersję Eclipse 3.7.1 , dopiero ta wersja ma wsparcie dla Java7, poprzednie tego nie miały i to była przyczyna , że nie mogłem skompilować tego przykładu. Dzięki za pomoc i pozdrawiam.

mietek

"Następnie w sprawdzamy, " w niepotrzebne chyba

mietek

if(warunek1){
instrukcje, gdy warunek1 jest prawdziwy
}
else if(warunek2{
instrukcje, gdy warunek2 jest prawdziwy, a warunek1 fałszywy
}


czy bo warunek2 nie powinieneś zamknąć nawiasu? (warunek2)

mietek

Przy zapisywaniu projektów w eclipse wyskakuje mi coś takiego:
http://zapodaj.net/images/3d5921877cdf.jpg
O co chodzi?

Witek

Twój link u mnie nie dziala

Mateusz

Napisałem dziś taki oto program:


package Halson.SaveFile;

import java.io.*;
import java.util.*;
/**
* @author Mateusz
*
*/
public class SaveFile {

/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
System.out.println("Welcome");
System.out.println("Do you wand create file?\nY or N");
Scanner writeReply = new Scanner(System.in);
String reply = writeReply.nextLine();

if(reply.equals("Y")){
System.out.println("Please, enter the name file ending .txt");
Scanner writeName = new Scanner(System.in);
String nameFile = writeName.nextLine();

System.out.println("\nPlease, enter contents the file.");
Scanner writeContents = new Scanner(System.in);
String contentsFile = writeContents.nextLine();

PrintWriter saveFile = new PrintWriter(nameFile);
saveFile.println(contentsFile);
saveFile.close();
System.out.println("\nI save \""+contentsFile+"\" in the file \""+nameFile+"\"");
}
else if(reply.equals("y")){
System.out.println("Please, enter the name file ending .txt");
Scanner writeName = new Scanner(System.in);
String nameFile = writeName.nextLine();

System.out.println("\nPlease, enter contents the file.");
Scanner writeContents = new Scanner(System.in);
String contentsFile = writeContents.nextLine();

PrintWriter saveFile = new PrintWriter(nameFile);
saveFile.println(contentsFile);
saveFile.close();
System.out.println("\nI save \""+contentsFile+"\" in the file \""+nameFile+"\"");
}

System.out.println("Do you wand load file?\nY or N");
Scanner writeReply2 = new Scanner(System.in);
String reply2 = writeReply2.nextLine();

if(reply2.equals("Y")){
System.out.println("Please write the name file of load");
Scanner writeLoadName = new Scanner(System.in);
String nameLoadFile = writeLoadName.nextLine();

Scanner loadFile = new Scanner(new File(nameLoadFile));
String loadContents = loadFile.nextLine();
System.out.println("\nI load \""+nameLoadFile+"\"\nContents this file: \""+loadContents+"\"");
}
else if(reply2.equals("y")){
System.out.println("Please write the name file of load");
Scanner writeLoadName = new Scanner(System.in);
String nameLoadFile = writeLoadName.nextLine();

Scanner loadFile = new Scanner(new File(nameLoadFile));
String loadContents = loadFile.nextLine();
System.out.println("\nI load \""+nameLoadFile+"\"\nContents this file: \""+loadContents+"\"");
}
System.out.println("Good-Bye!");
}
}

A moje pytanie brzmi:
Czy można, żeby po wpisaniu Y lub N nie trzeba było wciska Enter?

karolsw2

Uzyles NetBeans ;)

MrRain345

Pomoże ktoś? Chcę sobie zrobić mini gierkę. Zrobiłem jeden dialog i nie wiem co w nim nie tak.



import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.File;
import java.util.Scanner;

public class Test{
public static void main(String[] args) throws FileNotFoundException{

File fileWstep = new File("Wstep.dat");
Scanner in = new Scanner(fileWstep);
String wstep = in.nextLine();
System.out.println("Wstep = "+wstep); // <-To zrobiłem dla testów
// i prawidłowo wczytało tekst false
// a resztę kodu omija
if(wstep=="false"){
System.out.println("\\ //\\ // || ====== //\\ ===||");
System.out.println(" \\ // \\ // || || //--\\ . ||");
System.out.println(" \\// \\// || || // \\ ==||");
System.out.println();
System.out.println("Nazywam sie Gerald i jestem burmistrzem tej wioski");
System.out.println("A ty kim jestes?");
System.out.println();
System.out.println("Nazywam sie ");

String imie;
Scanner scImie = new Scanner(System.in);
imie = scImie.nextLine();

PrintWriter saveImie = new PrintWriter("Imie.dat");
saveImie.println(imie);
saveImie.close();

PrintWriter saveWstep = new PrintWriter("Wstep.dat");
saveWstep.println("true");
saveWstep.close();
}

}
}

MrRain345

Już sobie poradziłem z tym problemem

Robin

Może mało znaczący błąd ale:

else if(warunek2{ <- zapomniałeś nawiasu domknąć:)

To jest 2 przykład.

Arzippo

Czy w switch można zamienić liczbe na litere?

Np.: switch(litera){
case "x":
System.out.println(...);
break;

Czy coś w tym stylu?

=Qwerty=

Sprobuj czegoś takiego:

Scanner wczytaj = new Scanner (System.in);
char x = wczytaj.next().charAt(0);

switch (x)
{
case 'a': System.out.println ("..."); break;
case 'b': System.out.println ("..."); break;
case 'c': System.out.println ("..."); break;
// ........
default: System.out.println ("..."); break;
}
Trzeba tylko pamiętać, żeby miedzy pojedyncze literki wpisywac w apostrofy ( ' ' );

DDO

Ciekawy sposub pisania poradnika najpierw odczytywanie dancyh a potem dopiero instrukcje

nowak

Jeden z przedmówców zasygnalizował taką kwestię, że jeśli z jednego obiektu Scanner spróbujemy odczytać najpierw wartość liczbową do zmiennej int/double, a potem tekst do Stringa, to program nie pozwoli wpisać Stringa i wykona od razu dalsze operacje.

import java.util.Scanner;

public class Kalkulator{
public static void main(String[] args){

Scanner odczyt = new Scanner(System.in);
System.out.println("Podaj pierwsza liczbe");
double liczba1 = odczyt.nextDouble();

System.out.println("Podaj druga liczbe");
double liczba2 = odczyt.nextDouble();

System.out.println("Podaj dzialanie");
String znak = odczyt.nextLine();

if("+".equals(znak))
System.out.println("Wynik: "+(liczba1+liczba2));
else if("-".equals(znak))
System.out.println("Wynik: "+(liczba1-liczba2));
else if("*".equals(znak))
System.out.println("Wynik: "+(liczba1*liczba2));
else if("/".equals(znak))
System.out.println("Wynik: "+(liczba1/liczba2));
else
System.out.println("Nieprawidlowy znak"); */
}
}

Wykonując powyższy kod po podaniu obu liczb nie ma możliwości wpisania znaku działania - konsola od razu wyświetla "Nieprawidlowy znak".
Jest jakaś zasada, że tego samego Scannera nie wolno wykorzystywać do odczytywania liczb i Stringów, czy w moim kodzie jest błąd? Co ciekawe, jeśli najpierw odczytujemy String, a po nim int/double, wszystko jest w porządku.

Sławek Ludwiczak

Hej, już teraz składam sobie postanowienie noworoczne, kiedy w końcu będę miał luz od studiów, żeby przejrzeć wszystkie komentarze i odświeżyć cały kurs o brakujące kwestie :)

Co do Scannera to problem polega na tym, że metody nextInt, czy nextDouble nie konsumują znaka końca linii, dlatego, gdy wywyoływana jest metoda nextLine() to konsumuje znak linii, które są w buforze. Z tego powodu po każdym użyciu metod wczytujących liczby najbezpieczniej jest od razu skonsumować znak nowej linii wywołując "pusto" metodę nextLine().
czyli, np:
int liczba = odczyt.nextInt();
odczyt.nextLine();

k2marko

Czy jest możliwość do jednego case przypisać kilka wartości? Czy muszę rozpisywać wszystkie możliwe wartości w osobnych caseach nawet jeśli dla niektórych z nich instrukcje się pokrywają?

Bartek

Witam, mam problem z kodem
import java.util.Scanner;

public class Tluszcz{
public static void main(String[] args){
double a, b, c, d, e, x, wynik, waga, talia;
int plec;
Scanner odczyt = new Scanner(System.in);

System.out.println("Podaj wage ciala: ");
waga = odczyt.nextInt();

System.out.println("Podaj obwod talii: ");
talia = odczyt.nextInt();

System.out.println("wybierz plec:");

switch(plec){
case 1:
System.out.println("kobieta");
x = 76.76;
break;
case 2:
System.out.println("mezczyzna");
x = 98.46;
break;
default:
System.out.println("podaj licze 1 lub 2");
}

//obliczenia

a = 4.15*talia;

b = a/2.54;

c = 0.082 * waga * 2.2;

d = b-c-y;

e = waga*2.2;

wynik = d/e*100;
System.out.println("Poziom tluszczu w twoim organizmie wynosi: "+wynik);
}
}
dopiero zaczalem sie uczyc javy i nie wiem jak naprawic ten kod
z gory dzieki za odpowiedz

Chujnia

gówwwno

Chujnia

Typ wstawia tylko przychylne sobie komentarze.

Artur

Mam problem z porównaniem imion po mimo tych samych imion wyświetla mi że nie są to te same imiona :
public static void main(String[] args) {
out.println("Podaj imię:");
boolean p=false;
Scanner sc = new Scanner(in);
String imie = sc.nextLine();
String imie2 = "Ala";

p = imie==imie2;
out.println(imie);
out.println(imie2);
if(p==true)
out.println("Twoje imie jest w bazie :)");
else
out.println("Przykro nam nie mamy Twojego imienia w bazie :(");
}

Tomek

zastosuj metodę "equals" np. imie.equals(imie2)

Misza

A ja mam pytanie.
W lekcji jest żeby dawać
if(){
}
else if(){
}
else if(){
}
else{
}

a ja zrobiłem to w ten sposób

if(){
}
if(){
}
if(){
}
else{
}
i też działało.
Czy mój zapis jest z jakiś sposób błędny albo czy może prowadzić do jakiegoś błędu w dalszej części programu? i czemu w większości poradników jest żeby robić (if/else if/else if/else) skoro (if/if/if/else) też działa?

Sławek Ludwiczak

Zapis z samymi ifami bez stosowania else może w niektórych sytuacjach prowadzić do błędów. Zwróć uwagę, że w przypadku stosowania if...else zawsze wykona się tylko jeden blok kodu - wszystkie inne zostają pominięte.
Przy stosowaniu if...if...if... pewne warunki mogą się zazębiać, czyli np
if(liczba Jeśli coś jest mniejsze od 5, to automatycznie jest mniejsze od 10 - w takim przypadku wykonają się ciała obu funkcji sterujących. Gdyby zastosować tutaj if else to przy wartości np. liczba=4 wykona się tylko pierwsza część.
Dodatkowo zamiast stosowania if...if...if... raczej powinno się zastosować funkcję switch (od Javy 7 oprócz liczb obsługuje również Stringi), jest to bardziej eleganckie.
W ogólności sugeruję też unikanie if'ów jak to tylko możliwe - duże zagnieżdżanie takich instrukcji dramatycznie komplikuje czytelność kodu

Marcin

Hey witam wszystkich swietna stronka dla początkujących jak ja, mam pewien problem chce napisac program który wyświetli mi wiek po zapytaniu i zaleznie od liczby wyswietli cos innego dla przykladu:
"ile masz lat? "
"28"
"o to mlody jesteś "
"ile masz lat?"
"60"
"o trochę jesteś na tym świecie "
Myślałem zeby uzyc cos na zadadzie

for( int i<0; i<60; i++);
Ale męczę sie i wyrywam sobie wlosy i nie umiem nic wykombinować :( proszę pomóżcie!!

Lolo

Do końca nie rozumiem co chcesz zrobić. Jednak do sprawdzania warunków używa się polecenia if() a nie for().

Marcin

hey ok juz zrobiem pokoza bym o co chodzi ale nie pozwala mi wyslac w komentarzu siedziaem przy tym 3 godziny grr ale juz naprawilem

lolo

Pod polem do wpisywania komentarzy jest link do forum, tam można wklejać dłuższy kod dodatkowo można użyć kolorowania składni dzięki czemu łatwiej czyta się kod.

derive

Ja tytułem błędu logicznego w przedostatnim przykładzie: nie "liczba ujemna", tylko "liczba niedodatnia": zero też łapie się na ostatni warunek.