5. Przepływ sterowania
5.1. Instrukcje, bloki i zmienne lokalne
Instrukcja - jedno z następujących wyrażeń zakończone średnikiem:
przypisanie wartości;
inkrementacja lub dekrementacja wartości;
wywołanie metody;
utworzenie nowego obiektu operatorem new.
Blok (instrukcja złożona) - kilka instrukcji zamkniętych w nawiasy { }.
Zmienna lokalna - zdeklarowana wewnątrz bloku. Zmiennej takiej należy nadać wartość początkową:
{
int i = 0;
… // dalszy ciąg bloku
}
5.2. Instrukcje warunkowe
Dwa rodzaje instrukcji warunkowych:
if ( < wyrażenie logiczne > ) < instrukcja >
if ( < wyrażenie logiczne > ) < instrukcja_1 >
else < instrukcja_2 >
Przykład:
static void ocena ( double cena, double c1, double c2 ) {
String ocena = "nieznana";
if ( cena < c1 ) ocena = "tanio";
else if ( cena >= c1 && cena <= c2 )
ocena = "średnio ";
else ocena = "drogo";
System.out.println ( ocena );
}
Instrukcję if else można zapisać w sposób skrócony:
< warunek > ? < instrukcja_1> : < instrukcja_2 >
Przykład:
znak = ( liczba < 0.0 ) ? "ujemna" : "nieujemna";
5.3. Instrukcja wyboru
Instrukcja wyboru ma składnię:
switch ( < test > ) {
case < wartość 1 > : < instrukcja 1 > ; break;
case < wartość 2 > : < instrukcja 2 > ; break;
… // dalsze przypadki
default : < instrukcja domyślna >
}
Wyrażenie testowe musi mieć wartość typu int. Wartości etykiet muszą być wyrażeniami stałymi. W miejsce break może wystąpić return.
Jeżeli pominiemy break lub return, to wykonywany jest następny przypadek instrukcji wyboru.
5.4. Pętle
Trzy rodzaje pętli:
for ( < inicjalizacja > ; <test> ; <inkrementacja > )
< instrukcja >
Przykład:
for ( int i =0; i < tab.length; i++ ) tab [ i ] = i ;
while ( < warunek > ) < instrukcja >
Przykład:
int i = 0;
while ( i < tab.length ) { tab [ i ] = i ; i++ ; }
do < instrukcja > while ( < warunek > );
Przykład:
int i = 0;
do {tab [ i ] = i ; i++ ; } while ( i < tab.length ) ;
Instrukcja break przerywa wykonanie pętli.
Przykład:
static int ujemny( int tab [ ] ) {
int i = 0;
while ( i < tab.length ) {
if ( tab [ i ] < 0 ) break ;
else i ++ ;
}
if ( i == tab.length ) i = -1 ; // brak ujemnego
return i;
}
Instrukcja continue pomija resztę pętli.
Przykład:
static int kopiujDodatnie ( int oryg [ ] , int kopia [ ] ) {
int liczba = 0, i = 0 ;
do {
if ( oryg [ i ] <= 0 ) { i ++ ; continue ; }
kopia [ liczba ] = oryg [ i ];
liczba ++ ;
i ++ ;
} while ( i < oryg.length ) ;
return liczba;
}
Aplikacja Telefony
class Telefony {
final static int MAX = 10,
IMIĘ = 0, NAZWISKO = 1;
static String tekst;
static String lista [ ] [ ] = new String [ MAX ] [ 3 ];
static int liczbaOsób = 0;
static void nagłówek ( ) { … }
static String wczytajDane ( ) {
String dane = "Andrzej Kmicic 782-15-44
Jurij Bohun 653-12-87
Jan Skrzetuski 856-11-67
Helena Kurcewicz 764-76-99";
return dane;
}
static int wczytajSłowo ( char [ ] znaki, int nrZnaku,
StringBuffer bufor ) {
bufor.setLength ( 0 );
while ( ( nrZnaku <= znaki.length-1) &&
( znaki [ nrZnaku ] != ' ' ) ) {
bufor.append ( znaki [ nrZnaku ] );
nrZnaku++; }
return nrZnaku+1;
}
static int zapisz ( int nrOsoby, int wybór,
StringBuffer bufor, String lista [ ] [ ] ) {
lista [ nrOsoby ] [ wybór ] = bufor.toString ( );
return ++wybór;
}
static int naListę ( ) {
char [ ] znaki = tekst.toCharArray ( );
StringBuffer bufor = new StringBuffer ( );
int liczbaZnaków = znaki.length;
int nrZnaku = 0;
int nrOsoby = 0;
int wybór = 0;
while ( nrZnaku < liczbaZnaków-1 ) {
nrZnaku = wczytajSłowo ( znaki, nrZnaku,
bufor );
if ( wybór > 2 ) { wybór = 0; nrOsoby++;}
wybór = zapisz ( nrOsoby, wybór, bufor, lista );
}
return ++nrOsoby;
}
static void drukujListę ( ) {
System.out.println ( "Lista telefonow:" );
System.out.println ( "------------------------------" );
System.out.println ( "Lp Imie Nazwisko Telefon" );
System.out.println ( "------------------------------" );
for ( int i = 0; i < liczbaOsób ; i++ ) {
System.out.print ( ( i + 1 ) + " " );
for ( int j = 0; j < 3 ; j++ ) {
System.out.print ( lista [i] [j] + " " );
}
System.out.println ( );
}
System.out.println ( "------------------------------" );
}
static void podaj ( int wybór ) {
int i = 0;
switch ( wybór ) {
case IMIĘ:
System.out.print ( '\n' + "Imiona: " );
do {
System.out.print ( lista [ i ] [ 0 ] + " " );
i++;
}
while ( i < liczbaOsób );
break;
case NAZWISKO:
System.out.print ( '\n' + "Nazwiska: " );
do {
System.out.print ( lista [ i ] [ 1 ] + " " );
i++;
}
while ( i < liczbaOsób );
break;
default:
System.out.println ( "Bledny wybor" + '\n' );
}
System.out.println ( );
}
public static void main ( String args [ ] ) {
nagłówek ( );
tekst = wczytajDane ( );
liczbaOsób = naListę ( );
drukujListę ( );
podaj ( IMIĘ );
podaj ( NAZWISKO );
}
}
Adam Borkowski Język programowania „Java” 5-8