Varför? 732G11 Linköpings universitet 2011-02-08
Varför? 1 2 3 Varför? 4 5
Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while ( pos < nrofints ) { System. out. println (" Mata in ett heltal :"); integers [i] = in. nextint (); pos = pos + 1;
Varför? Synlighet och livslängd En variabel är bara synlig inom den omgivning där den definierats. När den omgivningen inte längre finns glöms variabeln bort. Variabler deklarerade i en slinga är bara åtkomlig inifrån den slingan.
For for-loopen Varför? for ( initiering ; villkor ; uppdatering ){ gör ngt ; initiering villkor JA Gör något NEJ uppdatering
Varför? Används väldigt ofta tillsammans med arrayer. For Försöker minimera risken att börja/sluta för tidiget/sent eller att glömma uppdatera räknarvariabeln. for-loopen int [] arr = new int [ nrofelements ]; long sum = 0; for ( int i = 0; i < nrofelements ; i ++) { sum = sum + arr [i];
Do/while Varför? do/while-loopen do { gör ngt ; while ( villkor ); Gör något Är a<b? NEJ JA
Varför? Do/while Exakt som while-loopen från förra föreläsningen, men den kör alltid minst ett varv (kontrollerar villkoret efter varje varv). Kan vara bra för saker som behöver repeteras om det inte går så bra första gången, exempelvis inläsning av data från användaren. do/while-loopen int tal = 0; do { System. out. print (" Ange ett tal mellan " + "3 och 26: "); tal = in. nextint (); while (( tal < 3) ( tal > 26));
break Varför? Avbryter en slinga (eller switchsats). Programmet fortsätter köra efter slingan. breaksatsen for ( int a = 0; a < 5; a ++){ if (q > 12) { break ;
Varför? Avbryter ett varv i en slinga. continue Programmet fortsätter köra slingan från början igen (med variabeln uppdaterad om det är en for-slinga). breaksatsen for ( int a = 0; a < 5; a ++){ if (q > 12) { continue ;
Varför? Det går att lägga en slinga i en annan. Nästlade slingor Den inre slingan utförs då x gånger för varje varv i den yttre loopen. Nästlade slingor for ( int a = 0; a < 5; a ++){ for ( int b = 0; b <= a; b ++){ System. out. print ("*"); System. out. print (" ");
Varför? Riktig javakod Multiplikationstabellen Scanner in = new Scanner ( System. in ); int table ; do { int row = 0; System. out. print (" Vilken tabell önskas?"); table = in. nextint (); while ( row < 10) { System. out. println ( table + "*" + row + " = " + ( table * row )); row = row + 1; while ( table!= 0);
Varför? Rövarspråket Skriv ett program som gör om svenska till rövarspråket. Rövarspråket Ange ord : hare hoharore Ange text : luftballong lolufoftotbobalollolonongog Ange text :
Varför? Javakod Rövarspråket String word ; do { word = in. nextline (); for ( int i =0; i< word. length (); i ++){ char letter = word. charat ( i); if ( letter == a letter == e letter == i letter == o letter == u letter == y letter == å letter == ä letter == ö ) { print ( letter ); else { print ( letter + "o" + letter ); while (! word. equals (" quit " ));
Varför? cards Övervägande positivt både om kursen, personal och Fö [20/23]. Tunga laborationer [5/23]. Fler övningar [2/23]. Bra/lagom laborationer [9/23]. Långa laborationer. (Blir bättre i de sanare laborationerna) Fler laborationstillfällen. (kommer att planeras in) Trångt på LA (förklaring av schemat). Mer eclipse på FÖ. Senare deadline? (antagligen en dålig idé) Diverse andra synpunkter.
Varför? Funktioner i matematiken Funktioner i matematiken: f (x) = 3x + 4 Inga sidoeffekter. (Kan inte påverka något utanför funktionen, förutom att returnera ett värde.) Deterministiska. (Samma argument ger alltid samma resultat.)
Funktioner i Java Varför? En funktion i Java... public static int f( int x){ return (3 * x + 4);... Kallas även. Kan ha sidoeffekter. (Kan påverka variabler utanför funktionen, förutom att returnera ett värde.) Kan vara icke-deterministiska. (Samma argument ger inte alltid samma resultat.)
Varför? Tydligare kod En metod har alltid ett namn. Ofta är det enklare att förstå vad som händer när man ser namnet än när man ser den kod som faktiskt körs. Namnet kan vara mer allmänt (abstrakt), och underlättar en översiktlig läsning av programmet. Tydlighet... if ( grade >= 3 && grade < 5) { grade ++;... grade = increasegradebyone ( grade );
Varför? Kortare kod Eftersom man kan använda koden igen så behöver man inte upprepa sig så ofta. Arbetsbesparande public static int getinteger ( int min, int max int n; do{ n = in. nextint (); while ( n < min n > max ); return n;
Att skapa en metod Varför? En metod... // Ökar ett tal med ett public static int increasebyone ( int value ){ int bigvalue = value + 1; return bigvalue ; public static void main ( String [] args ){ System. out. println ( increasebyone (41));...
Varför? Att skapa en metod public static int nextint()... betyder att vi får ett heltal i retur public static void println()... betyder att vi inte får något i retur alls public static int nextint()... betyder att vi inte använder några parametrar public static void println(string s)... betyder att vi kräver en String som parameter
Varför? Parametrar Fungerar som variabler, men de måste tilldelas ett värde när funktionen körs. Man brukar säga att man skickar med värden till tunktionen. Precis som vanliga variabler måste de ha både typ och namn. Efter att metoden är slut glöms parametrar och lokala variabler bort. Primitiva typer kopieras, medan referenstyper (läs Arrayer) delar på samma värde.
Varför? Resultatet av att köra en funktion. Kan vara void: (inget resultat genereras). Returvärden Anges med nyckelordet return: ex: return värde; När return körs avslutas funktionen (även om man inte kört färdigt den. För funktioner som inte returnerar något värde kan man fortfarande köra return; för att avsluta funktionen.
Varför? Metodanrop En metod anropas genom att skriva funktionsnamnet(parameter1, parameter2,...) Om funktionen returnerar ett värde av rätt typ kan funktionsanropet användas som det värdet: int a = beräkna(3, 7) + 4; Om du vill anropa i andra filer (klasser) måste du ange var de ligger: Klass.metod(...) exempelvis Math.random().
Att skapa en metod Varför? En metod... // Ökar ett tal med ett public static int increasebyone ( int value ){ int bigvalue = value + 1; return bigvalue ; public static void main ( String [] args ){ System. out. println ( increasebyone (41));...
Varför? Javakod Rövarspråket String word ; do { word = in. nextline (); for ( int i =0; i< word. length (); i ++){ char letter = word. charat ( i); if ( letter == a letter == e letter == i letter == o letter == u letter == y letter == å letter == ä letter == ö ) { print ( letter ); else { print ( letter + "o" + letter ); while (! word. equals (" quit " ));
Rövarspråket Varför? Javakod med metoden isvowel() do{ String word = in. nextline (); for ( int i =0; i< word. length (); i ++){ char letter = word. charat ( i); if ( isvowel ( letter )) { print ( letter ); else { print ( letter + "o" + letter ); while (! word. equals (" quit " ));
Rövarspråket Varför? Metoden isvowel() static boolean isvowel ( char letter ) { return letter == a letter == e letter == i letter == o letter == u letter == y letter == å letter == ä letter == ö ;
Rövarspråket Varför? En bättre isvowel() static boolean isvowel ( char letter ) { char [] vowels = { a, e, i, o, u, y, å, ä, ö ; for ( int j =0; j< vowels. length ; j ++){ if ( letter == vowels [j]) return true ; return false ;
Rövarspråket Varför? Globala variabler static char [] vowels = { a, e, i, o, u, y, å, ä, ö ; static boolean isvowel ( char letter ) { for ( int j =0; j< vowels. length ; j ++){ if ( letter == vowels [j]) return true ; return false ;
Varför? Koda Skriv en metod max(int[] s) som returnerar det högsta talet i arrayen s. Körexempel int [] arr = {1, 2, 3; System. out. println ( max ( arr )); => "3"
Varför? Koda Skriv en metod sorted(int[] s) som avgör om en array är sorterad (minst till störst). Körexempel int [] arr = {1, 2, 3; System. out. println ( sorted ( arr )); => true
Varför? Koda Skriv en metod equal(int[] s, int[] t) som avgör om en array är likadan som en annan. Körexempel int [] arr = {1, 2, 3; int [] arr2 = {1, 3, 3; System. out. println ( equal (arr, arr2 )); => false
Varför? class Prog { static String text = " ABCDEF "; public static void main ( String [] args ) { String text = " 123456 "; System. out. println ( text. charat (5)); System. out. println ( Prog. text. charat (5));
Varför? /* Schematiskt */ class Prog { static String text ; /* Schematiskt */ class System { static PrintWriter out ; System. out. println ( Prog. text. charat (5) ); System.out.println(...) Prog.text.charAt(...)
Varför? När Java exekverar en funktion, evalueras först argumenten och sedan körs själva funktionen. Detta illustreras genom att den beräknade delen av uttrycket stryks under, och ersätts på raden under av det beräknade värdet. Detta brukar kallas substitutionsmetoden.
Varför? I vilken ordning sker det? class Prog { static int square ( int a) { return a*a; static int average ( int a, int b) { return (a+b )/2; public static void main ( String [] args ) { println ( square (5*4-15)* average (8+2, 2*2))
Varför? println(square(5*4-15)*average(8+2, 2*2)); println(square(20-15)*average(8+2, 2*2)); println(square(5)*average(8+2, 2*2)); println(25*average(8+2, 2*2)); println(25*average(10, 2*2)); println(25*average(10, 4)); println(25*7); println(175);
Varför? En sträng av siffror static String foo ( int a) { String result = ""; for ( int i =0; i < a; i = i + 1) { result = result + i; return result ; foo(3*2+3).substring(0, 6).substring(2, 3*(5+3)/6)
Varför? foo(3*2+3).substring(0, 6).substring(2, 3*(5+3)/6) foo(6+3).substring(0, 6).substring(2, 3*(5+3)/6) foo(9).substring(0, 6).substring(2, 3*(5+3)/6) 012345678.substring(0, 6).substring(2, 3*(5+3)/6) 012345.substring(2, 3*(5+3)/6) 012345.substring(2, 3*8/6) 012345.substring(2, 24/6) 012345.substring(2, 4) 23
Varför? Logiskt? evalueras från vänster till höger Så fort ett svar är klart så avbryts evalueringen int a=3, b=4, c =5; if(b>a && b>c && a <10) average (a, b, c); else average (a, c, c);
Varför? int a=3, b=4, c=5; b > a && b > c && a < 10 true && b > c && a < 10 true && false && a < 10 false && a < 10 false
Varför? Hmm, vad skrivs ut? public static void main ( String [] args ) { String [] words = new String [ 2]; words [0] = " Bil "; words [1] = " Cykel "; println ( words [3-2]. substring (2, 4). length ());
Varför? println(words[3-2].substring(2, 4).length()) println(words[1].substring(2, 4).length()) println( Cykel.substring(2, 4).length()) println( ke.length()) println(2)