Erinevus lehekülje "Java:Sisend-Väljund" redaktsioonide vahel
(ei näidata sama kasutaja üht vahepealset redaktsiooni) | |||
39. rida: | 39. rida: | ||
</source> | </source> | ||
+ | Read 1-3 impordivad vajalikud klassikirjeldused. Need täidab Eclipse'i automaatselt ära. Kui kasutate mõnda muud arenduskeskkonda (kasvõi näiteks vim), siis peate need import-laused ise kirjutama. | ||
+ | Real 8 luuakse uus objekt muutujasse <code>br</code>, mida kasutame lugemiseks. | ||
+ | |||
+ | Rida 11 on see, mille jaoks meil on vaja erindi haldusega tegeleda. | ||
+ | |||
+ | Üks teine näide, kus kasutame natuke teistsugust ''wrapperit'': | ||
+ | |||
+ | <source lang="java"> | ||
+ | import java.util.Scanner; | ||
+ | |||
+ | public class ScannerExample { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | Scanner scanner = new Scanner(System.in); | ||
+ | System.out.println("write something:"); | ||
+ | if (scanner.hasNext()) { | ||
+ | String line = scanner.nextLine(); | ||
+ | System.out.println("got:" + line); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <code>Scanner</code> on selline vahend, mida saab kasutada väga edukalt ilma <code>try-catch</code> osata. Samuti võimaldab <code>Scanner</code> sisendist eraldada näiteks numbrid ja teksti. <code>BufferedReader</code> puhul saab sisendit lugeda ridahaaval - ülejäänud töötlus tuleb ise teha. | ||
+ | |||
+ | Allpool on kaks näidet, kuidas küsida kasutajalt vanust ja see täisarvuna kätte saada. | ||
+ | |||
+ | BufferedReader näide: | ||
+ | <source lang="java"> | ||
+ | import java.io.BufferedReader; | ||
+ | import java.io.IOException; | ||
+ | import java.io.InputStreamReader; | ||
+ | |||
+ | public class InputAge { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | ||
+ | try { | ||
+ | System.out.println("age:"); | ||
+ | String line = br.readLine(); | ||
+ | int age = Integer.parseInt(line); | ||
+ | System.out.println("got age:" + age); | ||
+ | } catch (IOException e) { | ||
+ | e.printStackTrace(); | ||
+ | } catch (NumberFormatException e) { | ||
+ | System.out.println("Only numbers allowed!"); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | Scanner näide: | ||
+ | <source lang="java"> | ||
+ | import java.util.Scanner; | ||
+ | |||
+ | public class InputAge { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | Scanner scanner = new Scanner(System.in); | ||
+ | System.out.println("age:"); | ||
+ | if (scanner.hasNextInt()) { | ||
+ | int age = scanner.nextInt(); | ||
+ | System.out.println("got age:" + age); | ||
+ | } else { | ||
+ | System.out.println("Only numbers allowed!"); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | Tavaliselt on programm vaja üles ehitada nii, et vanuse küsimuse puhul korratakse küsimust seni, kuni saadakse korrektne sisend. Siin näide BufferedReader'iga selle saaavutamine. Scanner'iga sama asja realiseerimise jädan teile harjutamiseks. | ||
+ | |||
+ | <source lang="java"> | ||
+ | import java.io.BufferedReader; | ||
+ | import java.io.IOException; | ||
+ | import java.io.InputStreamReader; | ||
+ | |||
+ | public class ReadInputLoop { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | ||
+ | while (true) { // endless loop, should work forever | ||
+ | try { | ||
+ | System.out.println("age:"); | ||
+ | String line = br.readLine(); | ||
+ | int age = Integer.parseInt(line); | ||
+ | System.out.println("got age:" + age); | ||
+ | // let's have a regular if-check also here | ||
+ | if (age < 0 || age > 100) { | ||
+ | System.out.println("Not in correct range!"); | ||
+ | } | ||
+ | // if an exception occurs, the "break" | ||
+ | // line is never reached and therefore | ||
+ | // the user is asked again his/her age. | ||
+ | break; // breaks out of the loop | ||
+ | |||
+ | } catch (IOException e) { | ||
+ | e.printStackTrace(); | ||
+ | } catch (NumberFormatException e) { | ||
+ | System.out.println("Only numbers allowed!"); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </source> | ||
[[Category:Java juhend|Sisend-väljund]] | [[Category:Java juhend|Sisend-väljund]] |
Viimane redaktsioon: 18. veebruar 2015, kell 02:02
Programmi suhtlemist välismaailmaga toimub läbi sisendi ja väljundi. Lühendatult viidatakse tihti "I/O", mis tähendab input/output.
Seade võib olla ühenduses mitme sisend- ja väljundseadmega.
Masinloetav ja inimloetav voog
Andmed võib jagada kahte kategooriasse: masinloetavad andmed ja inimloetavad andmed. Masinloetavad andmed on esitatud bittidena (ühtede ja nullide jadadena). Inimloetavad andmed koosnevad loetavatest sümbolitest, üldiselt 10nd-süsteemis. Näiteks 3.141592654.
Javas on kaks erinevat voogu:
- baitvoog (ingl byte stream) masinloetavate andmete jaoks
- sümbolvoog (ingl character stream) inimloetavate andmete jaoks.
Inimloetavate andmete lugemine
Kui teil on vaja lugeda andmeid mõnest voost (näiteks standardsisendist), saab kasutada sellist wrapperit nagu BufferedReader
. Kui voog otse võimaldab lugeda andmeid bait-haaval, siis BufferedReader
võimaldab andmeid lugeda reakaupa (oluliselt mugavam).
Näiteks: <source lang="java" line> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;
public class BufferedReaderExample {
public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { System.out.println("write something:"); String line = br.readLine(); System.out.println("got line:" + line); } catch (IOException e) { e.printStackTrace(); } }
}
</source>
Read 1-3 impordivad vajalikud klassikirjeldused. Need täidab Eclipse'i automaatselt ära. Kui kasutate mõnda muud arenduskeskkonda (kasvõi näiteks vim), siis peate need import-laused ise kirjutama.
Real 8 luuakse uus objekt muutujasse br
, mida kasutame lugemiseks.
Rida 11 on see, mille jaoks meil on vaja erindi haldusega tegeleda.
Üks teine näide, kus kasutame natuke teistsugust wrapperit:
<source lang="java"> import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("write something:"); if (scanner.hasNext()) { String line = scanner.nextLine(); System.out.println("got:" + line); }
}
}
</source>
Scanner
on selline vahend, mida saab kasutada väga edukalt ilma try-catch
osata. Samuti võimaldab Scanner
sisendist eraldada näiteks numbrid ja teksti. BufferedReader
puhul saab sisendit lugeda ridahaaval - ülejäänud töötlus tuleb ise teha.
Allpool on kaks näidet, kuidas küsida kasutajalt vanust ja see täisarvuna kätte saada.
BufferedReader näide: <source lang="java"> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;
public class InputAge {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { System.out.println("age:"); String line = br.readLine(); int age = Integer.parseInt(line); System.out.println("got age:" + age); } catch (IOException e) { e.printStackTrace(); } catch (NumberFormatException e) { System.out.println("Only numbers allowed!"); } }
}
</source>
Scanner näide: <source lang="java"> import java.util.Scanner;
public class InputAge {
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("age:"); if (scanner.hasNextInt()) { int age = scanner.nextInt(); System.out.println("got age:" + age); } else { System.out.println("Only numbers allowed!"); }
}
}
</source>
Tavaliselt on programm vaja üles ehitada nii, et vanuse küsimuse puhul korratakse küsimust seni, kuni saadakse korrektne sisend. Siin näide BufferedReader'iga selle saaavutamine. Scanner'iga sama asja realiseerimise jädan teile harjutamiseks.
<source lang="java"> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;
public class ReadInputLoop {
public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while (true) { // endless loop, should work forever try { System.out.println("age:"); String line = br.readLine(); int age = Integer.parseInt(line); System.out.println("got age:" + age); // let's have a regular if-check also here if (age < 0 || age > 100) { System.out.println("Not in correct range!"); } // if an exception occurs, the "break" // line is never reached and therefore // the user is asked again his/her age. break; // breaks out of the loop
} catch (IOException e) { e.printStackTrace(); } catch (NumberFormatException e) { System.out.println("Only numbers allowed!"); } } }
}
</source>