海外でjava を学習しているものです。
以下のcodeを実行したらエラーが出て
import java.util.Scanner;
public class Problem1
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Enter the lowest number.");
int lowestNumber = scan.nextInt();
System.out.println("Enter the highest number.");
int highestNumber = scan.nextInt();
int randomNumber = (int)(Math.random()*((highestNumber-lowestNumber)+1))+lowestNumber;
boolean input = false;
while(!input)
{
System.out.println("Enter you guess.");
String guess = scan.nextLine();
char guessedOperator = guess.charAt(0);
String guessedNumber = guess.substring(2);
System.out.println(guessNumber(lowestNumber,highestNumber,randomNumber,guessedOperator,guessedNumber,input));
}
}
public static String guessNumber(int lowestNumber, int highestNumber,int assumedRandomNumber, char assumedOperator, String number,boolean endProgram)
{
int assumedNumber = Integer.parseInt(number);
switch(assumedOperator)
{
case '<':
if(assumedRandomNumber<assumedNumber){return "Yes";}
else{return "No";}
case '>':
if(assumedRandomNumber>assumedNumber){return "Yes";}
else{return "No";}
case '=':
if(assumedRandomNumber==assumedNumber)
{
endProgram =true;
return "Correct, you win";
}
else
{
endProgram = true;
return "Incorrect, the number is not correct,sorry for you!";
}
}
return "";
}
}
下記のようにでてしまいます。
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:658)
at Problem1.main(Problem1.java:22)
String はユーザーに要求しているもので範囲など決めてないのですが、なぜこのエラーが出てくるのでしょうか。わかる人がいらっしゃれば教えていただきたいです。
No.2ベストアンサー
- 回答日時:
エラー文言はそのものずばりの原因と発生場所を説明しています。
この情報を元にデバックしましょう。
ユーザー入力は常に信用できないものです。
入力値を使う場合は、必ず検証しましょう。
* nextLine を使うならば、事前に hasNextLine で取れるか確認
* String の n 文字目を使うならば、事前に n 文字目まで存在するかを確認
* parseInt を使うならば、事前に整数形式であるか確認
endProgram は input と何ら関係ありませんので、while(!input) {...} が無限に実行されます。
大変わかりやすくご解説していただきありがとうございます。入力値を扱う際の諸所での確認の重要性について学ぶことができました。本当にありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
〔java〕 計算結果に0をつける...
-
for文を使った累乗の計算方法に...
-
java 拡張for map
-
java キーボード入力された値の...
-
javaのエラーが回収できない
-
コマンドライン引数の例外処理...
-
入力データ数を入力して、その...
-
JAVAのfor文で困っています。
-
Ctrl+Zが入力されると終了する...
-
*で正三角形を出力
-
C言語のポインターに関する警告
-
パソコンキーボードで時分秒を...
-
結合した文字列をファイル名に...
-
プログラミングの問題です。大...
-
IF関数でEmpty値を設定する方法。
-
Java配列でNullPointerExceptio...
-
[JAVA]try 内の変数を外で!?
-
cloneメソッドについて (java)
-
VBAで配列の計算
-
配列で、値の入っている要素数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Randomメソッドの確率設定
-
論理演算子”||”またはの入力方法
-
テキストボックスに入力された...
-
java キーボード入力された値の...
-
countに実行した回数をいれたい...
-
Java 配列<選挙>
-
総称型ArrayList<E>への参照...
-
Java、2の0乗~10乗の表示
-
2つのスクロールバーを連動させ...
-
数値⇒漢数字変換 java
-
Java 入力した整数値の合計を、...
-
配列を逆順させて表示させる方...
-
エラー(互換性の無い型)
-
javaで数独を解くプログラムに...
-
2次元配列の並び替え
-
javaのエラーが回収できない
-
7つ数字を表示したら改行すると...
-
java 電卓のプログラム
おすすめ情報