teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

修正

2020/10/05 14:44

投稿

icecleam
icecleam

スコア46

title CHANGED
File without changes
body CHANGED
@@ -1,22 +1,16 @@
1
1
  コマンドで引数に1つの値(西暦)を与えてその年の九星を出力するようにしたいです。
2
+ 上記の仕様を以下のコードで、実装しようとしたのですが、
2
- その際に、引数600年降とし、1599年以前場合はエラーメッセージを出したい。
3
+ 引数の数が1以時に、エラーメッセージ「コマンドライン引数の数が不正です」を出すようにしたいのですが、以下のような実行結果になってしまいます
3
4
 
4
- 上記の仕様を以下のコードで、実装しようとしたのですが、以下の4つがうまく動いてくれませんでした。。
5
- 以下のコードをどう修正すれば良いでしょうか。
5
+ 正常に動作させるにはのよ修正すれば良いか教えていただけないでしょうか。
6
- もしければ具体的なサンプルなどで教えてただきたいで。。
6
+ ろしくお願しま
7
7
 
8
-
9
- ・1599を入れた際に、五黄土星と出てしまう。
8
+ 実行結果
10
- →コマンドライン引数は 1600 年以降を指定してくださいと出したい
11
-
12
- ・abcと入れた際に、コマンドライン引数は 1600 年以降を指定してくださいと出てしまう
13
- →コマンドライン引数には正の整数を指定してくださいと出したい
9
+ ----
14
-
15
- ・2007,2008と入れた時になぜか、何も表示されない(他の値でも発生する可能性あり)
16
-
17
10
  ・2000 1500と入れた時に、2000の方を読み込んで九紫火星と出てしまう。
18
11
  →「コマンドライン引数の数が不正です」と出したい
19
12
 
13
+ -----
20
14
 
21
15
  現状のコード
22
16
  ```java
@@ -24,41 +18,72 @@
24
18
 
25
19
  public class Hoshi {
26
20
  public static void main(String[] args) {
21
+ int num = 0;
27
- try{
22
+ try {
28
- int num = Integer.parseInt(args[0]);
23
+ num = Integer.parseInt(args[0]);
24
+ } catch (ArrayIndexOutOfBoundsException e) {
25
+ System.out.println("コマンドライン引数の数が不正です");
26
+ return;
27
+ } catch (NumberFormatException e) {
28
+ System.out.println("コマンドライン引数には正の整数を指定してください");
29
+ return;
30
+ }
31
+ if (num < 0) {
32
+ System.out.println("コマンドライン引数には正の整数を指定してください");
33
+ return;
34
+ }
35
+ if (num < 1600) {
36
+ System.out.println("コマンドライン引数は 1600 年以降を指定してください");
37
+ return;
38
+ }
39
+
29
- int s = 0;
40
+ int s = 0;
30
- int a = 0;
41
+ int a = 0;
31
- s = num % 9;
42
+ s = num % 9;
43
+
44
+ if(s == 0){
45
+ s = 1;
46
+ }
47
+ if (s == 1){
48
+ s = 10;
49
+ }
50
+
32
- a = 11 - s;
51
+ a = 11 - s;
52
+
33
-
53
+ String msg = null;
54
+
34
- if(a == 1){
55
+ switch (a) {
56
+ case 1:
35
- System.out.println("一白水星");
57
+ msg = "一白水星";
58
+ break;
36
- }else if(a == 2){
59
+ case 2:
37
- System.out.println("二黒土星");
60
+ msg = "二黒土星";
61
+ break;
38
- }else if(a == 3){
62
+ case 3:
39
- System.out.println("三碧木星");
63
+ msg = "三碧木星";
64
+ break;
40
- }else if(a == 4){
65
+ case 4:
41
- System.out.println("四緑木星");
66
+ msg = "四緑木星";
67
+ break;
42
- }else if(a == 5){
68
+ case 5:
43
- System.out.println("五黄土星");
69
+ msg = "五黄土星";
70
+ break;
44
- }else if(a == 6){
71
+ case 6:
45
- System.out.println("六白金星");
72
+ msg = "六白金星";
73
+ break;
46
- }else if(a == 7){
74
+ case 7:
47
- System.out.println("七赤金星");
75
+ msg = "七赤金星";
76
+ break;
48
- }else if(a == 8){
77
+ case 8:
49
- System.out.println("八白土星");
78
+ msg = "八白土星";
79
+ break;
50
- }else if(a == 9){
80
+ case 9:
51
- System.out.println("九紫火星");
81
+ msg = "九紫火星";
52
- }else if(0 < num && num < 1600){
82
+ break;
53
- System.out.println("コマンドライン引数は 1600 年以降を指定してください");
54
- }else if(num < 0){
83
+ default:
55
- System.out.println("コマンドライン引数には正の整数を指定してください");
56
- }
84
+ }
57
- }catch(ArrayIndexOutOfBoundsException e){
85
+
58
- System.out.println("コマンドライン引数の数が不正です");
86
+ System.out.println(msg);
59
- }catch (NumberFormatException e) {
60
- System.out.println("コマンドライン引数は 1600 年以降を指定してください");
61
- }
87
+ }
62
- }
63
88
  }
64
89
  ```

1

修正

2020/10/05 14:44

投稿

icecleam
icecleam

スコア46

title CHANGED
File without changes
body CHANGED
@@ -2,8 +2,10 @@
2
2
  その際に、引数は1600年以降とし、1599年以前の場合はエラーメッセージを出したい。
3
3
 
4
4
  上記の仕様を以下のコードで、実装しようとしたのですが、以下の4つがうまく動いてくれませんでした。。
5
+ 以下のコードをどう修正すれば良いでしょうか。。
5
- く修正する方法を教えていただきたいです。
6
+ よければ具体的なサンプルなどで教えていただきたいです。
6
7
 
8
+
7
9
  ・1599を入れた際に、五黄土星と出てしまう。
8
10
  →コマンドライン引数は 1600 年以降を指定してくださいと出したい
9
11