1   package fi.jyu.mit.ohj2;
2   /**
3    * Alkeellinen IO-luokka hoitamaan mm. yhden näppäimen painallukseen
4    * liittyviä tehtäviä.
5    *
6    * @author Vesa Lappalainen
7    * @version 1.0, 10.02.2003
8    */
9   public class  IO {
10  
11    /**
12     * Luetaan yksi käyttäjän painama merkki
13     * @return käyttäjän painama merkki
14     */
15    public static char lue_merkki() {  // NOPMD sallitaan alleviiva historian painolastina
16  //    String s = Syotto.lue("");
17  //    if ( s.length() == 0 ) return 0;
18  //    return s.charAt(0);
19      return Readkey.getChar();
20    }
21  
22    /**
23     *  Rivinvaihto
24     */
25    public static final String RIVINVAIHTO = "\r\n";
26    
27    /**
28     * Ei käytetä oletusarvoa
29     */
30    public static final char EI_OLETUSTA = 0;
31    
32    /**
33     * Kaikki merkit kelpaavat
34     */
35    public static final String KAIKKI_KELPAA = null;
36    
37    /**
38     * Muutetaan merkit isoiksi ennen vertailua ja palautusta
39     */
40    public static final boolean MERKKI_ISOKSI = true;
41  
42  
43    /**
44     * Odotetaan yhden merkin painamista.  Vain jonossa kelpaavat olevat
45     * hyväksytään.  Jos painetaan [Enter], palautetaan merkki oletus.
46     * Jos merkki_isoksi == true, muutetaan merkki ennen vertailua ja palautusta
47     * isoksi kirjaimeksi.
48     * Esim.  <pre>c = odota_nappain("KE",'K',MERKKI_ISOKSI)</pre>
49     * odottaa kunnes painetaan joko K,k,E,e tai [Enter].   Jos painetaan
50     * [Enter], palautetaan 'K', muuten ko. painettu merkki.
51     *
52     * @param kelpaavat Joukko kirjaimia jotka kelpaavat. null = kaikki kelpaa
53     * @param oletus Merkki joka palautetaan [Enter] painamisesta, 0 = ei oltusta
54     * @param merkki_isoksi muutetaanko merkki isoksi kirjaimeksi (true) vai ei
55     * @return käyttäjän painama merkki, joko joukosta kelpaavat tai sitten oletus
56     */
57    public static char odota_nappain(String kelpaavat, char oletus,  // NOPMD sallitaan alleviiva historian painolastina
58                                     boolean merkki_isoksi) {  
59      char painettu;
60      do {
61        painettu = lue_merkki();
62        if ( merkki_isoksi ) painettu = Character.toUpperCase(painettu);
63        if ( oletus != EI_OLETUSTA && RIVINVAIHTO.indexOf(painettu) >= 0 )
64          return oletus;
65      } while ( kelpaavat != null && kelpaavat.indexOf(painettu) < 0 );
66      return painettu;
67    }
68  
69  
70    /**
71     * Odotetaan kunnes käyttäjä painaa jotakin merkkiä
72     */
73    public static void odota_jotakin()   {  // NOPMD sallitaan alleviiva historian painolastina
74      System.out.println("Paina jotakin!");
75      odota_nappain(KAIKKI_KELPAA,EI_OLETUSTA,MERKKI_ISOKSI);
76    }
77  
78  
79    /**
80     * Odotetaan kunnes käyttäjä painaa joko K tai E
81     * @return true jos käyttäjä painaa K, muuten false
82     */
83    public static boolean kylla_vastaus()   { // NOPMD sallitaan alleviiva historian painolastina
84      return (odota_nappain("KE",'K',MERKKI_ISOKSI)=='K');
85    }
86  
87    
88    /**
89     * Testataan syöttöluokkaa
90     * @param args ei käytössä
91     */
92    public static void main(String[] args) {
93       String kelpaavat = "ABCDE";
94       System.out.print("Paina joku kirjaimista " + kelpaavat + " (F) :");
95       char c = odota_nappain(kelpaavat,'F',MERKKI_ISOKSI);
96       System.out.println();
97       System.out.println("Painoit " + c);
98       odota_jotakin();
99    }
100 }
101 
102