001package fi.jyu.mit.ohj2; 002/** 003 * Alkeellinen IO-luokka hoitamaan mm. yhden näppäimen painallukseen 004 * liittyviä tehtäviä. 005 * 006 * @author Vesa Lappalainen 007 * @version 1.0, 10.02.2003 008 */ 009public class IO { 010 011 /** 012 * Luetaan yksi käyttäjän painama merkki 013 * @return käyttäjän painama merkki 014 */ 015 public static char lue_merkki() { // NOPMD sallitaan alleviiva historian painolastina 016// String s = Syotto.lue(""); 017// if ( s.length() == 0 ) return 0; 018// return s.charAt(0); 019 return Readkey.getChar(); 020 } 021 022 /** 023 * Rivinvaihto 024 */ 025 public static final String RIVINVAIHTO = "\r\n"; 026 027 /** 028 * Ei käytetä oletusarvoa 029 */ 030 public static final char EI_OLETUSTA = 0; 031 032 /** 033 * Kaikki merkit kelpaavat 034 */ 035 public static final String KAIKKI_KELPAA = null; 036 037 /** 038 * Muutetaan merkit isoiksi ennen vertailua ja palautusta 039 */ 040 public static final boolean MERKKI_ISOKSI = true; 041 042 043 /** 044 * Odotetaan yhden merkin painamista. Vain jonossa kelpaavat olevat 045 * hyväksytään. Jos painetaan [Enter], palautetaan merkki oletus. 046 * Jos merkki_isoksi == true, muutetaan merkki ennen vertailua ja palautusta 047 * isoksi kirjaimeksi. 048 * Esim. <pre>c = odota_nappain("KE",'K',MERKKI_ISOKSI)</pre> 049 * odottaa kunnes painetaan joko K,k,E,e tai [Enter]. Jos painetaan 050 * [Enter], palautetaan 'K', muuten ko. painettu merkki. 051 * 052 * @param kelpaavat Joukko kirjaimia jotka kelpaavat. null = kaikki kelpaa 053 * @param oletus Merkki joka palautetaan [Enter] painamisesta, 0 = ei oltusta 054 * @param merkki_isoksi muutetaanko merkki isoksi kirjaimeksi (true) vai ei 055 * @return käyttäjän painama merkki, joko joukosta kelpaavat tai sitten oletus 056 */ 057 public static char odota_nappain(String kelpaavat, char oletus, // NOPMD sallitaan alleviiva historian painolastina 058 boolean merkki_isoksi) { 059 char painettu; 060 do { 061 painettu = lue_merkki(); 062 if ( merkki_isoksi ) painettu = Character.toUpperCase(painettu); 063 if ( oletus != EI_OLETUSTA && RIVINVAIHTO.indexOf(painettu) >= 0 ) 064 return oletus; 065 } while ( kelpaavat != null && kelpaavat.indexOf(painettu) < 0 ); 066 return painettu; 067 } 068 069 070 /** 071 * Odotetaan kunnes käyttäjä painaa jotakin merkkiä 072 */ 073 public static void odota_jotakin() { // NOPMD sallitaan alleviiva historian painolastina 074 System.out.println("Paina jotakin!"); 075 odota_nappain(KAIKKI_KELPAA,EI_OLETUSTA,MERKKI_ISOKSI); 076 } 077 078 079 /** 080 * Odotetaan kunnes käyttäjä painaa joko K tai E 081 * @return true jos käyttäjä painaa K, muuten false 082 */ 083 public static boolean kylla_vastaus() { // NOPMD sallitaan alleviiva historian painolastina 084 return (odota_nappain("KE",'K',MERKKI_ISOKSI)=='K'); 085 } 086 087 088 /** 089 * Testataan syöttöluokkaa 090 * @param args ei käytössä 091 */ 092 public static void main(String[] args) { 093 String kelpaavat = "ABCDE"; 094 System.out.print("Paina joku kirjaimista " + kelpaavat + " (F) :"); 095 char c = odota_nappain(kelpaavat,'F',MERKKI_ISOKSI); 096 System.out.println(); 097 System.out.println("Painoit " + c); 098 odota_jotakin(); 099 } 100} 101