質問編集履歴

2

修正

2020/10/05 14:44

投稿

icecleam
icecleam

スコア46

test CHANGED
File without changes
test CHANGED
@@ -1,40 +1,28 @@
1
1
  コマンドで引数に1つの値(西暦)を与えてその年の九星を出力するようにしたいです。
2
2
 
3
+ 上記の仕様を以下のコードで、実装しようとしたのですが、
4
+
3
- その際に、引数600年降とし1599年以前の場合はエラーメッセージを出したい。
5
+ 引数の数が1以外の時に、エラーメッセージ「コマンドライン引数の数が不正です」を出すようにしたいのですが、以下のような実行結果になってしまいます
4
6
 
5
7
 
6
8
 
7
- 上記仕様を以下のコードで、実装しようとしたのでが、以下の4つがうまく動いてくれませんでし
9
+ 正常に動作させるにはどのように修正れば良か教えいただけないでしょうか
8
10
 
9
- 以下のコードをどう修正すれば良ょうか。。
11
+ よろしくお願いします
10
-
11
- もしよければ具体的なサンプルなどで教えていただきたいです。。
12
12
 
13
13
 
14
14
 
15
+ 実行結果
15
16
 
16
-
17
- ・1599を入れた際に、五黄土星と出てしまう。
17
+ ----
18
-
19
- →コマンドライン引数は 1600 年以降を指定してくださいと出したい
20
-
21
-
22
-
23
- ・abcと入れた際に、コマンドライン引数は 1600 年以降を指定してくださいと出てしまう
24
-
25
- →コマンドライン引数には正の整数を指定してくださいと出したい
26
-
27
-
28
-
29
- ・2007,2008と入れた時になぜか、何も表示されない(他の値でも発生する可能性あり)
30
-
31
-
32
18
 
33
19
  ・2000 1500と入れた時に、2000の方を読み込んで九紫火星と出てしまう。
34
20
 
35
21
  →「コマンドライン引数の数が不正です」と出したい
36
22
 
37
23
 
24
+
25
+ -----
38
26
 
39
27
 
40
28
 
@@ -50,77 +38,139 @@
50
38
 
51
39
  public static void main(String[] args) {
52
40
 
53
- try{
41
+ int num = 0;
54
42
 
55
- int num = Integer.parseInt(args[0]);
43
+ try {
56
44
 
57
- int s = 0;
45
+ num = Integer.parseInt(args[0]);
58
46
 
59
- int a = 0;
47
+ } catch (ArrayIndexOutOfBoundsException e) {
60
48
 
61
- s = num % 9;
49
+ System.out.println("コマンドライン引数の数が不正です");
62
50
 
63
- a = 11 - s;
51
+ return;
64
52
 
65
-
53
+ } catch (NumberFormatException e) {
66
54
 
67
- if(a == 1){
55
+ System.out.println("コマンドライン引数には正の整数を指定してください");
68
56
 
69
- System.out.println("一白水星");
57
+ return;
70
58
 
71
- }else if(a == 2){
59
+ }
72
60
 
73
- System.out.println("二黒土星");
61
+ if (num < 0) {
74
62
 
75
- }else if(a == 3){
63
+ System.out.println("コマンドライン引数には正の整数を指定してください");
76
64
 
77
- System.out.println("三碧木星");
65
+ return;
78
66
 
79
- }else if(a == 4){
67
+ }
80
68
 
81
- System.out.println("四緑木星");
69
+ if (num < 1600) {
82
70
 
83
- }else if(a == 5){
71
+ System.out.println("コマンドライン引数は 1600 年以降を指定してください");
84
72
 
85
- System.out.println("五黄土星");
73
+ return;
86
74
 
87
- }else if(a == 6){
75
+ }
88
76
 
89
- System.out.println("六白金星");
90
77
 
91
- }else if(a == 7){
92
78
 
93
- System.out.println("七赤金星");
79
+ int s = 0;
94
80
 
95
- }else if(a == 8){
81
+ int a = 0;
96
82
 
97
- System.out.println("八白土星");
83
+ s = num % 9;
98
84
 
99
- }else if(a == 9){
100
85
 
101
- System.out.println("九紫火星");
102
86
 
103
- }else if(0 < num && num < 1600){
87
+ if(s == 0){
104
88
 
105
- System.out.println("コマンドライン引数は 1600 年以降を指定してください");
89
+ s = 1;
106
90
 
107
- }else if(num < 0){
91
+ }
108
92
 
109
- System.out.println("コマンドライン引数には正の整数を指定してください");
93
+ if (s == 1){
110
94
 
111
- }
95
+ s = 10;
112
96
 
113
- }catch(ArrayIndexOutOfBoundsException e){
97
+ }
114
98
 
115
- System.out.println("コマンドライン引数の数が不正です");
99
+
116
100
 
117
- }catch (NumberFormatException e) {
101
+ a = 11 - s;
118
102
 
119
- System.out.println("コマンドライン引数は 1600 年以降を指定してください");
120
103
 
121
- }
122
104
 
105
+ String msg = null;
106
+
107
+
108
+
109
+ switch (a) {
110
+
111
+ case 1:
112
+
113
+ msg = "一白水星";
114
+
115
+ break;
116
+
117
+ case 2:
118
+
119
+ msg = "二黒土星";
120
+
121
+ break;
122
+
123
+ case 3:
124
+
125
+ msg = "三碧木星";
126
+
127
+ break;
128
+
129
+ case 4:
130
+
131
+ msg = "四緑木星";
132
+
133
+ break;
134
+
135
+ case 5:
136
+
137
+ msg = "五黄土星";
138
+
139
+ break;
140
+
141
+ case 6:
142
+
143
+ msg = "六白金星";
144
+
145
+ break;
146
+
147
+ case 7:
148
+
149
+ msg = "七赤金星";
150
+
151
+ break;
152
+
153
+ case 8:
154
+
155
+ msg = "八白土星";
156
+
157
+ break;
158
+
159
+ case 9:
160
+
161
+ msg = "九紫火星";
162
+
163
+ break;
164
+
165
+ default:
166
+
123
- }
167
+ }
168
+
169
+
170
+
171
+ System.out.println(msg);
172
+
173
+ }
124
174
 
125
175
  }
126
176
 

1

修正

2020/10/05 14:44

投稿

icecleam
icecleam

スコア46

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,11 @@
6
6
 
7
7
  上記の仕様を以下のコードで、実装しようとしたのですが、以下の4つがうまく動いてくれませんでした。。
8
8
 
9
+ 以下のコードをどう修正すれば良いでしょうか。。
10
+
9
- く修正する方法を教えていただきたいです。
11
+ よければ具体的なサンプルなどで教えていただきたいです。
12
+
13
+
10
14
 
11
15
 
12
16