180 likes | 360 Views
Loeng 8. Programmi suhtlus “välisilmaga”. Konsooldialoog Käsurea argumendid Andmevahetus tekstifailidega. Konsooldialoog. Java/AlgJava. AlgJava:. import java.io.*; . . . BufferedReader konsoolilt = new BufferedReader( new InputStreamReader(
E N D
Loeng 8 Programmi suhtlus “välisilmaga” • Konsooldialoog • Käsurea argumendid • Andmevahetus tekstifailidega
Konsooldialoog Java/AlgJava AlgJava: import java.io.*; . . . BufferedReader konsoolilt = new BufferedReader( new InputStreamReader( System.in)); System.out.print(“Palunn: "); try{ n = Integer.parseInt(konsoolilt.readLine()); } catch(IOException e){ System.err.println(e); } readln print(“Palunn: "); int x = Integer.parseInt(readln()); Alt+pr Alt+s2i Kasutajal tuleb tõesti arv sisestada, muidu on tegemist veaga ja väljastataksevastavad veateated. print(“Palun a: "); double a = Double.parseDouble(readln()); print(“Palun s: "); String s = readln(); Ujupunktarvu sisestamine (AlgJava): Alt+s2d Sõne sisestamine (AlgJava): :
DialoogiaknastJava/AlgJava • Programm küsib andmeid • Programmi algusesse ridaimport javax.swing.JOptionPane; • Kohale, kus programm peaks andmeid küsima, tuleb panna rida String sisestatu = JOptionPane.showInputDialog(null,"Sisesta midagi", "Andmete sisestamine“, JOptionPane.QUESTION_MESSAGE); int n = Integer.parseInt(sisestatu);
Käsurea argumendid • Peameetod ei erine teistest meetoditest kuigivõrd. • Tal on olemas ka formaalne parameeter, mille tüüp on String[] (sõnede järjend). • Näidetes on sageli nimega args, aga valida võib ka mingi muu nime. • Peameetodi parameetrit kasutades saame soovitud sisendandmeid programmile käsurealt ette anda. • Käivitades programmi näiteks käsuga java KlassiNimi väärtus1 saab sõnejärjend args pikkuseks ühe ja tema ainus element omandab väärtuse args[0] = "väärtus1"; Et järjendi args elemendid on sõned, siis on loomulikult kõik käsurealt saadud andmed programmis tüüpi String.
Käsurea argumendid class Z{ public static void main(String[] args){ for(int i = 0; i < a.length); i++) System.out.println(i + “: “ + args[i]); } } javac Z.java java Z java Z aa b 0: aa 1: b java Z “aa b“ c 0: aa b 1: c AlgJava: * i = 0 .. a.length-1 println(i + “: “ + args[i]);) Käsurea argumendid antakse projekti Save-script sektsiooni viimase rea lõpus
Ülesanne 1 Koostada programm, mis saab käsurealt inimese kehamassi (täisarv kg) ja pikkuse (meetrites) ning väljastab selle inimese kehamassi indeksi.
class A{ public static void main(String[ ] args){ if(args.length != 2){ õpetus(); return; } int mass = Integer.parseInt(args[0]); double pikkus = Double.parseDouble(args[1]); System.out.println(" mass = " + mass); System.out.println(" pikkus = " + pikkus); System.out.println(" kehamassi indeks = " + (int)Math.round((mass / pikkus /pikkus)*100)/100); } static void õpetus(){ System.out.println(" Kasutamine:"); System.out.println(" java Kmi massKg pikkusM"); System.out.println(" Nt:"); System.out.println(" java Kmi 85 1.86"); } }
class Main{ public static void main(String[ ] args){ if(args.length != 2) õpetus(); return; int mass = Integer.parseInt(args[0]); double pikkus = Double.parseDouble(args[1]); println(" mass = " + mass); println(" pikkus = " + pikkus); println(" kehamassi indeks = " + (int)Math.round((mass / pikkus /pikkus)*100)/100); void õpetus() println(" Kasutamine:"); println(" java Kmi massKg pikkusM"); println(" Nt:"); println(" java Kmi 85 1.86"); }
Andmevahetus tekstifailidega Vt ka Aabits. Jadafailid import java.io.*; class A{ public static void main(String[] args){ } // abimeetodid: private static BufferedReader readerFrom(String s) throws FileNotFoundException{ // avada tekstiline sisendfail nimega s return new BufferedReader(new FileReader(s)); } private static PrintWriter writerTo(String s) throws IOException{ // avada tekstiline väljundfail nimega s return new PrintWriter(new FileWriter(s), true); } }
public static void main(String[] args){ // sisendfaili kopeerimine väljundfaili try { String kust = _; // sisendfaili nimi BufferedReader sfail = readerFrom(kust); // sisendfailst lugeja String kuhu = _; // väljundfaili nimi PrintWriter vfail = writerTo(kuhu); // väljundfaili kirjutaja String rida = ""; while((rida = sfail.readLine()) != null){ // lugeda rida sisendfailist vfail.println(rida); // rea kirjutamine väljundfaili } // lõpetamine sfail.close(); vfail.close(); } catch (IOException e){ System.err.println(e.getMessage()); } }
AlgJava I/O Alt+io !! try String kust = _; sisendfaili nimi BufferedReader sfail = readerFrom(kust); sisendfailst lugeja String kuhu = _; väljundfaili nimi PrintWriter vfail = writerTo(kuhu); väljundfaili kirjutaja String rida = ""; * while((rida = sfail.readLine()) != null)lugeda rida sisendfailist vfail.println(rida); // rea kirjutamine väljundfaili lõpetamine sfail.close(); vfail.close(); catch (IOException e){ System.err.println(e.getMessage()); sisendfaili kopeerimine väljundfaili
Ülesanne 2 Koostada programm, mis saab käsurealt tekstifaili nime ja väljastab seal olevad read konsoolile. Ülesanne 2a Koostada programm, mis saab käsurealt tekstifaili nime ja väljastab sealt konsoolile need read, mis sisaldavad kas sümbolit ‘{‘ või sümbolit ‘}‘ (või mõlemat).
AlgJava I/O, readln !! try print(“Palun faili nimi: “) String kust = readln(); sisendfaili nimi BufferedReader sfail = readerFrom(kust); sisendfailst lugeja String rida = ""; * while((rida = sfail.readLine()) != null)lugeda rida sisendfailist println(rida); // rea väljastamine konsoolile lõpetamine sfail.close(); catch (IOException e){ System.err.println(e.getMessage()); Ülesanne 2 (sisendfail konsoolile)
Vana eksamiülesanne Luua tekstiredaktoriga fail sonad.txt, mille igas reas on üks sõna, näiteks berta anna dora umberto tere Failis ei esine kahte sama algustähega sõna. Kirjutada programm, mis loeb käsurealt sõna ja kirjutab selle ekraanile kahel viisil. Kõigepealt nii nagu sõna käsureale kirjutati ning seejärel nii, et selle sõna kõik tähed asendatakse vastavalt esitähele failist sonad.txt võetud sõnadega, ühendades need sidekriipsudega. Kui vastavat sõna failis pole, siis kirjutatakse selle asemel kolm küsimärki. Suuri ja väikesi tähti ei eristata. Näide Kui käsurealt antakse ette sõna Tartu, siis väljastatakse ekraanile Sonast Tartu saadakse tere-anna-???-tere-umberto Programmi võib kirjutada klassina, mis sisaldab ainult peameetodit. Peameetod peab ühtlasi ekraanile väljastama ka autori nime ja matriklinumbri.
Teine vana eksamiülesanne Luua tekstiredaktoriga fail avaldised.txt, mille igas reas on üks eesti keeles kirjutatud aritmeetiline avaldis, näiteks kaks pluss seitse miinus kolm neli miinus üks pluss kuus pluss üheksa Avaldistes on ainult ühekohalised positiivsed arvud (1—9) ja tehtemärkidest ainult pluss ja miinus. Kirjutada programm, mis võtab failist avaldised.txt avaldised, arvutab nende väärtused ning kirjutab vastused arvudena faili vastused.txt. Näide Ülaltoodud avaldiste puhul kirjutatakse faili vastused.txt read 6 18 Programmi võib kirjutada klassina, mis sisaldab ainult peameetodit. Peameetod peab ühtlasi ekraanile väljastama ka autori nime ja matriklinumbri.
Eksam • Registreerimine juba avatud (vt järgmine slaid) • Eksamile pääseb, kui kõik 4 kontrolltööd on arvestatud • Kes eksamile pääseb, sel juba 40 (+ kuni 10 lisaülesannetest) punkti. • Eksam annab kuni 4*20 punkti. • Eksamil on 1 natuke teoreetilisem ülesanne ja 3 praktilist ülesannet.
Tähe 4-145 Liivi 2-004 Liivi 2-203 Liivi 2-205 Liivi 2-311 12. dets. 14-18 ei toimu ei toimu8. jaan. 9-1317. jaan. 9-1323. jaan. 9-13 Korduseksam29. jaan. 9-13 ei toimu ei toimu
Mõned küsimused • Millised teemad vajavad eriti kordamist? • Kui palju te nädalas tunniväliselt programmeerimise ainega tegelete? • Kas see aeg on piisav? • Kas oleksite huvitatud nädalas kaks korda arvutipraktikumis osalemisest? (Või juba osaletegi?) • Mis hinde Te arvate eksamil saavat?