handout
handout
handout
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Programmering<br />
hh.se/DB2004<br />
Föreläsning 5:<br />
Fält samt Input/Output<br />
Verónica Gaspes<br />
www2.hh.se/staff/vero<br />
www2.hh.se/staff/vero/programmering<br />
Lite mer om Javas stöd för fält<br />
Hur många element har ett fält<br />
Till exempel cmdLn i<br />
main(String[] cmdLn){...}<br />
cmdLn.length<br />
ger svaret!<br />
Center for Research on Embedded Systems<br />
IDE-sektionen<br />
1 / 1<br />
2 / 1<br />
Exempel: vad är det största talet<br />
Kodfragment<br />
Vi måste titta på alla element i kommandoraden men vi vill inte<br />
ändra programmet för olika antal värden!<br />
public static void main(String[] cmdLn){<br />
int max;<br />
for(int i = 0 ; i< cmdLn.length ; i++){<br />
<br />
}<br />
System.out.println(max);<br />
}<br />
Exempel: vad är det största talet<br />
Hur kan vi tänka<br />
Om vi hela tiden ser mer och mer av fältet kan vi komma ihåg det<br />
största talet vi har sett hittills!<br />
Det vi vet (antecknar, kommer ihåg) är maxvärdet av den<br />
delen av fältet vi redan har sett!<br />
När vi ser ett element till måste vi vara beredda att uppdatera<br />
maxvärdet!<br />
När vi har sett hela fältet har vi maxvärdet av hela fältet!<br />
Vad är startvärdet Här finns det olika alternativ!<br />
Om vi bara tillåter positiva tal, är alla större än 0, så vi kan<br />
börja med 0!<br />
Om vi tillåter godtyckliga heltal, är alla större än<br />
Integer.MIN VALUE.<br />
Vi kan även börja med första elementet!<br />
3 / 1<br />
4 / 1
Exempel: vad är det största talet<br />
Att ommöblera ett fält<br />
Kodfragment<br />
public static void main(String[] cmdLn){<br />
int max = Integer.MIN_VALUE;<br />
int val;<br />
for(int i = 0 ; i
Kommandoraden<br />
Standard output<br />
Sammanfattning<br />
Alla klasser har en metod main() som tar ett fält av strängar<br />
som argument.<br />
Fältet består av de kommandoradsargument vi skriver. Dessa<br />
förmedlas till Java av operativsystemet.<br />
Det är en konvention att både OS och Java hanterar dessa<br />
argument som strängar.<br />
Om vi vill betrakta ett argument som ett tal måste vi använda<br />
metoder som Integer.parseInt() för att<br />
konvertera argumentet.<br />
Sammanfattning<br />
För att skriva ut värden från Java-program använder vi<br />
System.out.println() och System.out.print().<br />
Java skickar dessa värden till en ström av tecken känd som<br />
standard output.<br />
Operativsystemet brukar koppla standard output till terminalen.<br />
I Unix kan vi dirigera om standard output till en fil med >.<br />
9 / 1<br />
10 / 1<br />
Ett exempel<br />
Flera möjligheter<br />
Experiment med tärningkast<br />
public class Dice{<br />
public static void main(String[] cmdLn){<br />
int sampleSize = Integer.parseInt(cmdLn[0]);<br />
int dice;<br />
for(int i = 0;i dice10000<br />
11 / 1<br />
12 / 1
Flera möjligheter<br />
Flera möjligheter<br />
Standard audio kan användas för<br />
att spela upp och manipulera<br />
ljudfiler. Vi kommer att kunna<br />
spela .wav-filer, kunna skriva<br />
program som hanterar fält av<br />
double samt läsa och skriva dem i<br />
.wav-filer.<br />
Standard draw kan användas för<br />
att presentera utdata i grafisk<br />
form och även för enkla<br />
animeringar.<br />
13 / 1<br />
14 / 1<br />
Standard Input<br />
StdIn<br />
I Java finns ett bibliotek som heter Scanner. Vi börjar med<br />
bokens anpassning av denna som heter StdIn som är lättare att<br />
använda. Vi tar Javas om ett par veckor när vi talar om objekt och<br />
ickestatiska metoder.<br />
1 Standard input tas, by default, från tangentbordet (som ekas i<br />
terminalen)<br />
2 Från standard input kan man ge input till programmet medan<br />
den exekverar.<br />
3 I unix (linux, mac, solaris) är det möjligt att dirigera om<br />
standard input så att man kan använda en fil.<br />
Kort beskrivning av StdIn<br />
Biblioteket stödjer en abstrakt ström av data som kan vara tom<br />
eller kan innehålla en följd av värden åtskilda med mellanslag.<br />
Varje värde kan vara en sträng eller ett värde av en av Javas<br />
primitiva typer.<br />
Programmet konsumerar värdena när det läser in dem. När<br />
programmet har läst ett värde kan det inte backa och läsa det igen.<br />
15 / 1<br />
16 / 1
StdIn<br />
Exempel I<br />
API (Application Programming Interface)<br />
boolean isEmpty() true om inga fler värden,<br />
false annars<br />
int readInt() läs ett värde av typ int<br />
double readDouble() läs ett värde av typ double<br />
long readLong() läs ett värde av typ long<br />
boolean readBoolean() läs ett värde av typ boolean<br />
char readChar() läs ett värde av typ char<br />
String readString() läs ett värde av typ String<br />
String readLine() läs resten av raden<br />
String readAll() läs resten av texten<br />
Läs N från kommandoraden och sedan läs N heltalsvärden från<br />
standard input och skriv ut deras summa.<br />
Kod<br />
public class AddInts {<br />
public static void main(String[] cmdLn) {<br />
int n = Integer.parseInt(cmdLn[0]);<br />
int sum = 0;<br />
for (int i = 0; i < n; i++){<br />
sum = sum + StdIn.readInt();<br />
}<br />
System.out.println("Sum is " + sum);<br />
}<br />
}<br />
17 / 1<br />
18 / 1<br />
Om dataströmmen standard in<br />
När man anropar java gör man tre saker<br />
1 begär att programmet skall börja köra<br />
2 anger värden för kommandoradsargumenten<br />
3 börjar definiera dataströmmen standard in<br />
Den följd av tecken man anger i terminalen efter kommandoraden<br />
är standardinputströmmen. Man interagerar med programmet som<br />
väntar på att man skall ge strömmen av tal.<br />
19 / 1<br />
Exempel II<br />
Interagera med programanvändaren för att hon skall gissa vilket tal<br />
datorn har tänkt på.<br />
public static void main(String[] cmdLn) {<br />
int n = 1 + (int) (Math.random() * 1000000);<br />
System.out.print("I’m thinking of a number ");<br />
System.out.println("between 1 and 1,000,000");<br />
int m = 0;<br />
while (m != n) {<br />
System.out.print("What’s your guess ");<br />
m = StdIn.readInt();<br />
if (m == n) System.out.println("You win!");<br />
if (m < n) System.out.println("Too low ");<br />
if (m > n) System.out.println("Too high");<br />
}<br />
}<br />
20 / 1
Quiz<br />
Omdirigering<br />
Hur många gissningar behöver Du<br />
Hur skulle Du skriva programmet för att gissa det tal som<br />
användaren har tänkt på<br />
I unix kan man dirigera om standard input på samma sätt som<br />
man kunde dirigera om standard output.<br />
Medelvärdet av slumptal<br />
Vi har 2 program: en som genererar slumptal till standard output<br />
och en som räknar medelvärdet av värden inmatade via standard<br />
input. Vi kan kombinera dem genom<br />
stray.hh.se% java RandomNumbers 10000 > manyNumbers<br />
stray.hh.se% java Average < manyNumbers<br />
21 / 1<br />
22 / 1