🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

解決済

3回答

6166閲覧

InputMismatchExceptionが発生します。useDelimiterには指定してありますが

gyro16

総合スコア89

Java

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

0グッド

0クリップ

投稿2016/12/11 03:12

###前提・実現したいこと
InputMismatchExceptionが発生します。
入力は"3,3,3"と,カンマ区切りで与えているのですが、
ソースコードの変数sizeを入力受付するところで、InputMismatchExcepitonが発生します。
ScannerのuseDelimiterには,カンマが指定してあります。
この例外が発生しないようカンマ区切りで入力できるようにしたいです。

###発生している問題・エラーメッセージ

InputMismatchException

###該当のソースコード

Java

1import java.util.*; 2 3public class Main{ 4 private static final Scanner scan = new Scanner(System.in).useDelimiter("[ \n,]"); 5 6 public static void main(String[] args){ 7 8 while(scan.hasNext()){ 9 int x = scan.nextInt(); 10 int y = scan.nextInt(); 11 int size = scan.nextInt(); 12 } 13 } 14}

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

swordone

2016/12/11 03:17

その例外の後のメッセージは何が出ていますか?
guest

回答3

0

自己解決

private static final Scanner scan = new Scanner(System.in)
.useDelimiter("[,\s+]");
使うデリミタの正規表現をこう変えることで解決しました。

投稿2016/12/12 08:01

gyro16

総合スコア89

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

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

0

おそらくですがuseDelimiterで指定する正規表現を[ \n,]+にするとちゃんと動くと思います。


入力の区切り文字として、[ \n,]のうちどれか1つの文字が単一で使用されているならば、質問に記載されているコードでちゃんと動くと思います。
区切り文字が, (カンマ、スペース)だったり、改行が2回続いたりすると、InputMismatchExceptionが発生します。

以下のコードで意図した入力がされているか確認してみてください。

import java.util.Scanner; public class Main { private static final Scanner scanner = new Scanner(System.in).useDelimiter("[ ,\n]"); public static void main(String[] args) { while (scanner.hasNext()) { String x = scanner.next(); String y = scanner.next(); String size = scanner.next(); System.out.println(x + " " + y + " " + size); } } }

投稿2016/12/11 03:38

carimatics

総合スコア740

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

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

0

useDelimiterの引数は","だけでいけるはず。

投稿2016/12/11 03:19

swordone

総合スコア20669

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

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

gyro16

2016/12/11 03:28

これにtry catch構文でキャッチして"入力間違えです"と表示すると、永遠にcatchブロックが繰り返されます。これはnextInt()が呼び飛ばさないため、永久ループします。 try{ソースコード} catch(InputMismatchException e){System.out.println("入力間違えです");}
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問