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

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

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

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

Q&A

解決済

3回答

9331閲覧

javaで電卓を作りたいが、少数を入力すると例外(?)を出す

hokusou7500

総合スコア18

Java

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

0グッド

0クリップ

投稿2015/11/03 02:34

###前提・実現したいこと
javaで、コマンドライン上で動く簡単な電卓を作っています。
###発生している問題・エラーメッセージ
入力させるときにdouble型を使って少数も計算できるようにしたいのですが、少数を入力すると例外(たぶん)を吐き出してしまいます(詳しくはコードをご覧ください)。
初心者ですので、みなさんからしたら考えられないミスかもしれないですが、ご教授よろしくお願いいたします。
###ソースコード
public class dentaku{
public static void main(String[] args){

System.out.println("操作を選択し、入力してください。"); System.out.println("加算:1 減算:2 乗算:3 除算:4"); int keisan = new java.util.Scanner(System.in).nextInt(); if( keisan == 1 ){ System.out.println("足される数を入力してください"); double tasareru = new java.util.Scanner(System.in).nextInt(); System.out.println("+"); System.out.println("足す数を入力してください"); double tasu = new java.util.Scanner(System.in).nextInt(); double kekka = tasareru + tasu; System.out.println(kekka); }

}
}

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

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

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

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

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

guest

回答3

0

せっかくですから例外メッセージの読み方を知っておきましょう.

Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at dentaku.main(dentaku.java:9)

1行目は例外のクラス名です.どういう種類の例外が発生したかがわかります.
クラス名だけででも検索すればJavaのドキュメントが見つかると思うので,それを読めば原因がわかることもあります(特にRuntimeException系は).
2行目以降はその例外が発生した場所を示しています.括弧内はソースのjavaファイル名とその行数を示しています.
2行目は例外が発生したまさにその場所で,その下は上のメソッドを呼び出した場所です.
つまり,dentakuクラスのmainメソッドがScanner.nextIntメソッドを呼び出し,内部で別のnextIntを呼び出し,nextを呼び,throwForというメソッドを呼んだその中でこの例外が発生していることになります.
といっても,ScannerクラスはJavaの公開ライブラリなのでいじることができません.
なので,ここでは自作のクラスdentakuに問題がある,ということになります.その9行目でScanner.nextIntメソッドを使っていますが,Scannerのドキュメント(katoyさんご提示のもの)のnextIntメソッドを読むと,「例外」の項目に

InputMismatchException - 次のトークンがInteger正規表現に一致しないか範囲外である場合

とあります.難しい表現をしていますが,要は「Integerで表せる数字じゃない文字が入った」ということです.

投稿2015/11/03 04:39

swordone

総合スコア20649

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

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

hokusou7500

2015/11/03 07:38

ご回答ありがとうございます! これまでこのようなプログラムを開発したことがなかったので例外メッセージの読み方がわからず混乱してしまいました。ご丁寧に読み方を教えていただきましたので、これからは例外で悩むことがかなり減りそうです!
guest

0

ベストアンサー

少数値を整数値としてスキャンしようとしているのが原因ではないでしょうか?

new java.util.Scanner(System.in).nextInt();

これは入力を整数値として受け取りますので、

new java.util.Scanner(System.in).nextDouble();

としてみてはいかがでしょうか。

投稿2015/11/03 02:37

moredeep

総合スコア1507

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

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

hokusou7500

2015/11/03 02:41

早速のご回答ありがとうございます。 ご教授いただきました通りに修正したところ、無事小数値での入力が行われました。 とても助かりました!
guest

0

動作させると次のようになったはずです。

$ java dentaku 操作を選択し、入力してください。 加算:1 減算:2 乗算:3 除算:4 1 足される数を入力してください 2.3 Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at dentaku.main(dentaku.java:9)

ここで Exception のメッセージを google で検索してみます。
"ava.util.InputMismatchException" と " で囲って google の検索エリアや、ブラウザの URL エリアに入力します。
私の場合、上位こんな検索結果が出ました。
イメージ説明
最初のページを読んでみると、
Scanner の使い方の例がいろいろ載っています。
float や double を読む例もありました。

Scanner の使い方が正しくなかったのだとわかります。
web 上のページをそのまま信用せずに、java の API 文書で確認をするとよいです。

投稿2015/11/03 03:36

編集2015/11/03 04:41
katoy

総合スコア22324

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

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

hokusou7500

2015/11/03 03:57

ご回答ありがとうございます。 検索しても出てこないのかなー、と思ってこちらで質問した次第でしたが、ちゃんとあるんですねw エラーの解決方法まで教えていただき、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問