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

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

ただいまの
回答率

88.22%

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

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 1,025

chimo

score 53

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


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

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


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

int score = Integer.parseInt(args[0]) ;  //コマンドライン引数から点数を受け取る

        if((score>=0)&&(score<60)){

            System.out.println("「赤点です!」");

        }else if( score < 80 ){        

            System.out.println("「普通です!」");

        }else if( score <= 100 ){        

            System.out.println("「優秀です!」");    

        }else{

            System.out.println("「不正な点数です!」");

        }

        if( score == 100 ){

            System.out.println("「満点だったので宿題免除です!!」");

        }

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+3

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

int score = Integer.parseInt(args[0]) ;  //コマンドライン引数から点数を受け取る

if((score>=0)&&(score<60)){

    System.out.println("「赤点です!」");

}else if((score >= 60) && (score < 80)){        

    System.out.println("「普通です!」");

}else if((score >= 80) && (score <= 100)){        

    System.out.println("「優秀です!」");    

}else{

    System.out.println("「不正な点数です!」");

}

if( score == 100 ){

    System.out.println("「満点だったので宿題免除です!!」");

}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/02/19 17:03

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

    キャンセル

  • 2020/02/19 19:01

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

    キャンセル

  • 2020/02/20 01:28

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

    キャンセル

+3

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

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

    int score = Integer.parseInt(args[0]) ;  //コマンドライン引数から点数を受け取る

    if(0 <= score && score <= 100){
        if((score < 60)){
            System.out.println("「赤点です!」");
        }else if( score < 80 ){        
            System.out.println("「普通です!」");
        }else if( score <= 100 ){        
            System.out.println("「優秀です!」");    
            if( score == 100 ){
                System.out.println("「満点だったので宿題免除です!!」");
            }
        }
    }else{
       System.out.println("「不正な点数です!」");
    }

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/02/18 17:12

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

    キャンセル

  • 2020/02/19 00:56 編集

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

    キャンセル

  • 2020/02/19 13:24

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

    キャンセル

+2

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/02/18 17:03 編集

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

    キャンセル

  • 2020/02/18 17:08

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

    キャンセル

  • 2020/02/18 17:17

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

    キャンセル

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/20 01:25

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

    キャンセル

  • 2020/02/20 07:51

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

    キャンセル

  • 2020/02/20 13:33

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

    キャンセル

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

  • ただいまの回答率 88.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る