質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

4回答

3008閲覧

コマンドプロンプト上でマイナスの数字が認識されない(?)

chimo

総合スコア55

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

0クリップ

投稿2020/02/18 07:27

よくある問題だと思うのですが、if文の練習としてある範囲の点数をとった時にそれに応じたコメントが表示されるようにするというプログラムを書きました。具体的には以下の通りです。


コマンドライン引数から数値を1つ受け取り、これをテストの点数とする。

点数が0~100以外の数字だった場合 ⇒「不正な点数です!」と表示。
点数が0~59の数字だった場合 ⇒「赤点です!」と表示。
点数が60~79の数字だった場合 ⇒「普通です!」と表示。
点数が80~100の数字だった場合 ⇒「優秀です!」と表示。
点数の数字が100だった場合、「満点だったので宿題免除です!!」と最後に表示。


上記のプログラムを実行させるために私が書いたコードは以下の通りです。

Java

1int score = Integer.parseInt(args[0]) ; //コマンドライン引数から点数を受け取る 2 3 if((score>=0)&&(score<60)){ 4 5 System.out.println("「赤点です!」"); 6 7 }else if( score < 80 ){ 8 9 System.out.println("「普通です!」"); 10 11 }else if( score <= 100 ){ 12 13 System.out.println("「優秀です!」"); 14 15 }else{ 16 17 System.out.println("「不正な点数です!」"); 18 19 } 20 21 if( score == 100 ){ 22 23 System.out.println("「満点だったので宿題免除です!!」"); 24 25 } 26

実際コマンドラインに数字を打ち込むと、ほとんどは打ち込んだ数字にあったコメントがプログラム通りに表示されますが、一つだけ問題点があります。

何故かマイナスの数字(ゼロ未満の整数)をコマンドライン引数として打ち込んだ場合のみ、「普通です!」と表示されてしまいます。私としては0より下または100より上の数字を打ち込んだときには「不正な点数です!」と表示されるようにプログラムを書いたつもりですし、100より上の数(例えば200とか)を打ち込んだ際には「不正な点数です!」が正しく表示されるのです。ですが、マイナスの整数を打ち込んだときのみプログラムがきちんと行われません。ちなみにマイナス記号も含めきちんと半角で打っていますが全くダメです...。

いったい何を間違えているのか見当もつきません。どなたかアドバイス頂ければ嬉しく思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

上から順に処理されますからif( score < 80 )の条件に一致してますよね。
きちんと各条件の範囲を指定しなければいけません。

Java

1int score = Integer.parseInt(args[0]) ; //コマンドライン引数から点数を受け取る 2 3if((score>=0)&&(score<60)){ 4 5 System.out.println("「赤点です!」"); 6 7}else if((score >= 60) && (score < 80)){ 8 9 System.out.println("「普通です!」"); 10 11}else if((score >= 80) && (score <= 100)){ 12 13 System.out.println("「優秀です!」"); 14 15}else{ 16 17 System.out.println("「不正な点数です!」"); 18 19} 20 21if( score == 100 ){ 22 23 System.out.println("「満点だったので宿題免除です!!」"); 24 25} 26

投稿2020/02/18 07:39

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chimo

2020/02/18 07:56

大変丁寧な回答をしてくださりありがとうございました。とてもよく理解できました。たしかに、上から処理されていくことを踏まえるとif( score < 80 )の条件と一致してしまうのでそれに従った処理が行われてしまいますね...。何以上何未満かを丁寧に書く必要があったのですね。さっそくやり直してみたいとおもいます。ありがとうございます!!
kaina

2020/02/19 04:36

Javaの開発はEclipse等の統合開発環境を使用していますか? 使用しているのであれば、デバッグ時にステップ実行を試してみましょう。 そうすればどのようなインプットを与えた場合、どのような動きをするのかを プログラムの1ステップごとに確認することが可能です。 今回の場合はマイナスの数字を入力した場合、score < 80の条件に一致して、 「普通です!」を出力する行に入ることが目視確認出来ます。 もし、統合開発環境を何も使用していないならば、使用しましょう。 ステップ実行のやり方はご自分で調べて下さい。
chimo

2020/02/19 08:03

統合開発環境とは簡単に言うとどんなものなのでしょうか...。自分でも調べてみましたが、初心者目線ではよく理解できませんでした。サクラエディタを使用してプログラミングコードを書いておりますが、サクラエディタなどの機能とはまた違うものなのでしょうか...あまりにも無知で申し訳ないです。お手数おかけしますが、教えてくだされば大変嬉しく思います。
kaina

2020/02/19 10:01

統合開発環境とは簡単に言うとプログラミングを行う上での様々なサポート機能を備えたソフトウェアのことです。 利点は色々ありますが、スペルミスやカッコの数が足りなかったりといった構文エラーチェックを 視覚的に行ってくれたり、デバッグ機能が特に開発を行う上で助かるのではないかと思います。 他にも色々な機能がありますので、まずはお試しで導入してみてはいかがでしょうか。 javaであれば上でも書いたEclipseが良いかと思います。 導入方法や使用方法は検索すればたくさん出てきます。
chimo

2020/02/19 16:28

kainaさん、返信ありがとうございます。そのような機能があったとは...知りませんでした!教えていただき本当にありがとうございます!ここのサイトをより有意義に使わせていただくためにも自分でできる解決は統合開発環境を使用してなるべく自分でしたいと思います。おすすめにある通りEclipseを試してみたいと思います。改めて教えてくださり、ありがとうございました。
guest

0

}else if( score < 80 ){・・・80未満?

BAが出ていますが・・・こういう方法も有る・・・という事で

java

1 int score = Integer.parseInt(args[0]) ; //コマンドライン引数から点数を受け取る 2 3 if(0 <= score && score <= 100){ 4 if((score < 60)){ 5 System.out.println("「赤点です!」"); 6 }else if( score < 80 ){ 7 System.out.println("「普通です!」"); 8 }else if( score <= 100 ){ 9 System.out.println("「優秀です!」"); 10 if( score == 100 ){ 11 System.out.println("「満点だったので宿題免除です!!」"); 12 } 13 } 14 }else{ 15 System.out.println("「不正な点数です!」"); 16 } 17

投稿2020/02/18 07:36

編集2020/02/18 15:51
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chimo

2020/02/18 08:12

ご回答ありがとうございます。さきほどベストアンサー出してしまいましたが、大変学びの多い回答を頂けて嬉しく感じております。ifがいれこになっており、私がかいたコードよりもコンパクトで、素敵だなぁと思いました。今回いただいた回答を大切にしながら今後もJavaの学習を進めていきたいと思います。改めて、回答頂きありがとうございました。
cateye

2020/02/18 16:39 編集

見てもらえるか?・・・ですが、気になっていた所を修正しました。・・・60や80以下のとき、余計な判定(100との比較)をしないで済む様にしました。
chimo

2020/02/19 04:24

修正ありがとうございました!追加のメッセージも確認いたしました^^ ご丁寧にありがとうございます。いろんな書き方があるんですね...。とても参考になりました!!ありがとうございました!!
guest

0

次のelseにいったからと前の条件を引き継ぐわけではないので、範囲判定したい場合は毎回きちんとfromとtoを書きましょう。

投稿2020/02/18 07:36

m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/02/18 07:38

できれば「範囲外」も単にelseで置かない方が丁寧。そもそも数字として認識できる文字列じゃなかったらパース落ちるわけだし。
chimo

2020/02/18 07:50

一番早いご回答ありがとうございます。範囲外の0未満または100より上の場合も「if」で処理したほうが丁寧ということでしょうか。
m.ts10806

2020/02/18 07:52

と、コメントで追記してます。
chimo

2020/02/18 07:59

はい。ありがとうございます。追記のコメントも読んだうえでの質問でした。コメントを読んだうえで自分の理解が正しかったのか確認したかっただけです。
m.ts10806

2020/02/18 08:04 編集

そこは書かないと読んだかどうかわかりません。 せめて該当箇所を引用してください。 タイピングが速くない人だとありえなくはない時間差なので。(あとはコメント通知より自身のコメント投稿を優先したとか、よくある話)
chimo

2020/02/18 08:08

たしかに、既読がつくわけではないので追記を読んだ旨をコメントに添えておくべきでした。ご指摘ありがとうございます。まだ当サイトを使い始めたばかりで不慣れなため、無礼な真似をしてしまい、申し訳ありませんでした。以降はそのように致します。
m.ts10806

2020/02/18 08:17

怒っているわけではないので、そこは認識願います。 厚意による文字だけのやり取りなので省略したりしても読む人はいませんので。
guest

0

いろいろとでてるけど レンジcheckは範囲毎にやろう

try { if (args.length != 1 ) { throw new IllegalArgumentException("引数が不足してます。"); } int score = Integer.parseInt(args[0]) ; //コマンドライン引数から点数を受け取る if( score > 100 ){ throw new IllegalArgumentException("範囲外(+)"); } else if( score >= 80 ){ System.out.println("「優秀です!」"); if( score == 100 ){ System.out.println("「満点だったので宿題免除です!!」"); } } else if( score >= 60 ){ System.out.println("「普通です!」"); } else if( score >= 0 ){ System.out.println("「赤点です!」"); } else { throw new IllegalArgumentException("範囲外(-)"); } } catch (Exception e) { System.err.println("「不正な点数です!」"); }

投稿2020/02/19 08:22

編集2020/02/19 08:23
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chimo

2020/02/19 16:25

ご回答頂き大変ありがとうございました。throw new...まだ習ったことがないかもです...。完全に私の勉強不足ですので、また学習の折に触れては思い出してasahina1979さんの回答を読ませていただき、精進していきたいと思います。「レンジチェックは毎日やろう」との概要的なアドバイスがメインで伝えたいことであると思いますので、その点も気を付けて今後のプログラミング学習に生かしていきたいと思います。改めて回答頂きありがとうございました!!
退会済みユーザー

退会済みユーザー

2020/02/19 22:51

毎日じゃないよ、よく読んでw
chimo

2020/02/20 04:33

返信ありがとうございます!毎日は誤字です...(笑)日課みたいになってしまいましたすみませんw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問