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

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

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

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Java

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

Q&A

解決済

2回答

1623閲覧

Java nextLine()の使い方

momo1122

総合スコア17

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Java

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

0グッド

0クリップ

投稿2020/10/15 04:39

編集2020/10/15 05:18

前提・実現したいこと

0,1,2の半角数字が入力された場合のみ値をreturnしたいです。
「0,1,2」以外が入ればエラーメッセージを出したいです。
「aaa 1」や「1 ddd」としても「1」として認識されてしまうためnextLine()を使用し「1つの行」を区切りとして「0、1、2」が入力されたかの判別を行いたいです。

ここに質問の内容を詳しく書いてください。

単純に「0、1、2」の数値なら入力OKとし、それ以外はエラーメッセージとしたいのですが
そもそもnextLine()がString型なので数値の判定は可能なのか?という疑問があります。
可能であれば、数値を判定するにあたってどのような書き方があるのかアドバイスをいただきたいです。
うまく説明ができず、申し訳ありません。お力を貸していただける方よろしくお願い致します。

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

Exception in thread "main" java.lang.NumberFormatException: For input string: ""

該当のソースコード

イメージ説明

試したこと

また、数値に変換してからif文で条件にかける、なども試しましたが
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
というエラーメッセージがでてきます。
前提としてコードのnextLine()を使用した数値の比較をするためのコードの書き方がわからず、アドバイスをいただきたいのがこの質問でお聞きしたいことになります。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

m.ts10806

2020/10/15 04:42

提示されたコードだけでは動作確認できませんので、コピペで動作確認できるコードをご提示ください。 あと「うまくいかない」では何も伝わらないので起きている現象を具体的に記載してください。
momo1122

2020/10/15 04:52

承知いたしました!ご指摘ありがとうございます。 うまくいかない、というよりnextLine()で数値を比較するためのコードの書き方がわかりません。 質問内容修正いたします。
guest

回答2

0

自己解決

Java

1import java.util.Scanner; 2 3/** Playerクラス */ 4 5class Player extends TotalPlayer { 6 private int myHand; 7 private int hand; 8 Scanner sc = new Scanner(System.in); 9 10 /** 11 * 12 * 標準入力された数値を返す 13 * @return 14 */ 15 @Override 16 public int getHand() { 17 while (true) { 18 System.out.println("コマンド? 0:グー 1:チョキ 2:パー"); 19 // 20 myHand = Integer.parseInt(sc.nextLine()); 21 22 if(myHand == 0 || myHand == 1 || myHand == 2){ 23 break; 24 }else { 25 System.out.println("0~2を入力してください"); 26 } 27 } 28 29 return myHand; 30 } 31 32 33 34 /** Playerの手をグー、チョキ、パーで表示するメソッド */ 35 public void handPlayer() { 36 if (hand == 0) { 37 System.out.println(getName() + "はグーをだした"); 38 } else if (hand == 2) { 39 System.out.println(getName() + "はパーをだした"); 40 } else if (hand == 1) { 41 System.out.println(getName() + "はチョキをだした"); 42 } 43 } 44}

として解決致しました。ご回答いただいた方ありがとうございました。

投稿2020/10/15 05:16

編集2020/10/15 08:10
momo1122

総合スコア17

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

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

dodox86

2020/10/15 05:34

本当にこれで良いのでしょうか。10進数の数字ですらない「abc」などと入力した場合は考慮しなくて良いのですか。
kazuma-s

2020/10/15 07:02

本当にこれでよいのでしょうか? 質問の画像で myHand は class Player の中で private String myHand; と宣言されていますが、 解決した方法のコードでは、myHand を int として扱っています。
momo1122

2020/10/15 08:12

コメントありがとうございます。 まだ、文字列だった場合のエラーメッセージを表示するところまではいっていないのですが 現時点で「0、1、2」以外の数字の判定はできているので一旦解決とさせていただきました。 文字列判定は今から作成をおこないたいと思っています。
q_sane_q

2020/10/15 23:57

ちょっと見て思ったんですが、これ数字であっても「3」「-1」「777」みたいなのは通さず有効なのは0か1か2かのどれかなんですよね 数値型に変換せず文字列のまま比較すればいいのではないでしょうか?
momo1122

2020/10/16 01:21

コメントいただきありがとうございます。 入力されるのが「1」だとして、この入力された数値は文字列として比較することが可能なのでしょうか? また、入力される数値はint型、String型どちらになるのでしょうか? ちょっと混乱してしまっています、、、
q_sane_q

2020/10/16 02:12

見直したらy_waiwaiさんの回答が言いたいことと同じでしたね つまり「1」と入力すれば「1」という文字列として受け取られるのでそのまま「0」「1」「2」という文字列と比較すればいいのでは? ということです 数字を使ってるのが混乱の元っぽいので 使う文字を「A」「B」「C」にして書いてみてはどうでしょうか
momo1122

2020/10/16 02:14

ご丁寧にご説明頂きありがとうございます。 そういってもらえるとしっくりきました。 修正してみます!ありがとうございました!
guest

0

nextLineは文字列を返しますんで、その文字列を比較すればとりあえずのことは足ります
「java 文字列比較」でぐぐればしあわせになれるかとおもいます

ああ、よくみると、myHandが未定義ですね。変数宣言してやりましょう

投稿2020/10/15 04:42

編集2020/10/15 04:45
y_waiwai

総合スコア88042

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

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

momo1122

2020/10/15 05:06

ご回答、ありがとうございます。承知いたしました!検索させていただきます。よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問