前提・実現したいこと
こんばんは、Javaについての質問です。
とあるJavaの問題を解いていて、ある程度自力で調べてはみたものの、どうしても分からず困っています。
お助け願います…
下記が問題文となります。
問題文
下記クラスにあるフィールドをprivateにした上で、外部から値を設定したり取得できるように変更しなさい。 ただしhourは0~23,minuteは0~59,secondは0~59の間の値しか設定できないように制限すること。 それ以外の値を設定しようとした場合のエラー文言は任意とする。 使用前提条件のクラス: public class Clock{ int hour; int minute; int second; }
作成途中のソースコード
Java
1// Clockクラス // 2 3public class Clock { 4 private int hour; 5 private int minute; 6 private int second; 7 8 //コンストラクタ 9 Clock(int hour, int minute, int second){ 10 this.hour = hour; 11 this.minute = minute; 12 this.second = second; 13 } 14 15 //SET 16 public void setHour(int hour) { 17 this.hour = hour; 18 } 19 20 public void setMinute(int minute) { 21 this.minute = minute; 22 } 23 24 public void setSecond(int second) { 25 this.second = second; 26 } 27 28 //GET 29 public int getHour(){ 30 return hour; 31 } 32 33 public int getMinute(){ 34 return minute; 35 } 36 37 public int getSecond(){ 38 return second; 39 } 40 41} 42 43 44// Clockクラスを外部から実行するための別クラス、ClockTestクラス // 45 46 47import java.io.*; 48 49public class ClockTest { 50 public static void main(String[] args) throws IOException { 51 52 try{ 53 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 54 55 Clock clock = new Clock(); 56 57 System.out.print("数値を入力してください>" + " "); 58 String str = br.readLine(); 59 60 clock.setHour() = Integer.parseInt(str); 61 clock.setMinute() = Integer.parseInt(str); 62 clock.setSecond() = Integer.parseInt(str); 63 64 // 範囲チェック 65 if ((clock.getHour() > 0) && (clock.getHour() <= 23)) { 66 System.out.println(clock.getHour()); 67 68 } else if ((clock.getMinute() > 0) && (clock.getMinute() <= 59)) { 69 System.out.println(clock.getMinute()); 70 71 } else if ((clock.getSecond() > 0) && (clock.getSecond() <= 59)) { 72 System.out.println(clock.getSecond()); 73 } 74 75 } catch(Exception e) { 76 System.out.print("[ERROR] 数値を再入力してください>" + " "); 77 } 78 79 } 80} 81
制作途中のソースコードの改善(再度修正)
Java
1// Clockクラス // 2 3public class Clock { 4 private int hour; 5 private int minute; 6 private int second; 7 8 //コンストラクタ1 9 public Clock(){ 10 super(); 11 } 12 13 //コンストラクタ2 14 Clock(int hour, int minute, int second){ 15 this.hour = hour; 16 this.minute = minute; 17 this.second = second; 18 } 19 20 //SET 21 public void setHour(int hour) { 22 if(hour > 0 && hour <= 23){ 23 this.hour = hour; 24 /* 25 } else { 26 System.out.println("[ERROR] 数値を再入力してください"); 27 } 28 */ 29 } 30 31 public void setMinute(int minute) { 32 if(minute > 0 && minute <= 59){ 33 this.minute = minute; 34 /* 35 } else { 36 System.out.println("[ERROR] 数値を再入力してください"); 37 } 38 */ 39 } 40 41 public void setSecond(int second) { 42 if(second > 0 && second <= 59){ 43 this.second = second; 44 /* 45 } else { 46 System.out.println("[ERROR] 数値を再入力してください"); 47 } 48 */ 49 } 50 51 //GET 52 public int getHour(){ 53 return hour; 54 } 55 56 public int getMinute(){ 57 return minute; 58 } 59 60 public int getSecond(){ 61 return second; 62 } 63 64} 65 66 67 68// Clockクラスを外部から実行するための別クラス、ClockTestクラス // 69 70 71import java.io.*; 72 73public class ClockTest { 74 public static void main(String[] args) throws IOException { 75 76 77 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 78 Clock clock = new Clock(); 79 80/* 81 System.out.print("数値を入力してください>" + " "); 82 String str = br.readLine(); 83 84 clock.setHour(Integer.parseInt(str)); 85 clock.setMinute(Integer.parseInt(str)); 86 clock.setSecond(Integer.parseInt(str)); 87*/ 88 89//冗長かもしれませんが、入力の仕方を一つずつ入力できるよう修正しました 90 91 System.out.print("hourの数値を入力してください>" + " "); 92 String str = br.readLine(); 93 clock.setHour(Integer.parseInt(str)); 94 95 System.out.print("minuteの数値を入力してください>" + " "); 96 str = br.readLine(); 97 clock.setMinute(Integer.parseInt(str)); 98 99 System.out.print("secondの数値を入力してください>" + " "); 100 str = br.readLine(); 101 clock.setSecond(Integer.parseInt(str)); 102 103 try{ 104 System.out.println("hour" + " " + clock.getHour()); 105 System.out.println("minute" + " " + clock.getMinute()); 106 System.out.println("second" + " " + clock.getSecond()); 107 108 } catch(Exception e) { 109 System.out.println("[ERROR] 数値を再入力してください"); 110 } 111 112 } 113} 114
やりたいこと、困っていること
実行(したい)画面例
hourの数値を入力してください> 100
[ERROR]数値を再入力してください> 23
hour 23
minuteの数値を入力してください> 12
minute 12
secondの数値を入力してください> 36
second 36
現状、このプログラムをコンパイルしようとすると、インスタンス化ができませんというエラーと、clock.setHourに引数がありませんというエラーが出てしまい、実行できません。
実現したいこととしては、キーボードから好きな数値を入力させ、入力値が指定した数値の範囲内であれば出力し次の入力へ、範囲外であればエラー文言を出力、再入力を求めるプログラムを作成したいのですが、setとgetの使い方をうまく理解できていないせいかここから進まず…基礎の話で申し訳ないのですが、ご助言等いただけますと幸いです。
問題文には明記されていませんが、条件としてsetとgetを必ず使用することとなっています。
お手数おかけいたしますが何卒よろしくお願いいたします。
やりたいこと、困っていること(追記)
少し考えてみて、編集し直してみました。エラーは起こらなくなり、setでの値の設定も恐らく正しく行えたはずですので、プログラムの完成に少し近づけた気がします。
しかし、現状値を一つ入力すると、実行画面が下記のように出力されてしまいます。
数値を入力してください> 24
[ERROR] 数値を再入力してください
hour 0
minute 24
second 24
一度入力した数値が全ての値の範囲内であれば、全て入力されてしまいます…。恐らくは再入力を求める繰り返し文の設定を行なっていない為だと思うのですが、またここからどうしていいのか、お力を貸していただけると助かります。
お手数おかけいたしますが、引き続き何卒よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Java
java version "1.8.0_161"
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/05/22 16:57
退会済みユーザー
2018/05/27 14:52
2018/05/27 14:55 編集
退会済みユーザー
2018/05/27 15:39
退会済みユーザー
2018/05/27 15:43
2018/05/28 03:30
退会済みユーザー
2018/05/28 14:15