アプリ版:「スタンプのみでお礼する」機能のリリースについて

海外で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 はユーザーに要求しているもので範囲など決めてないのですが、なぜこのエラーが出てくるのでしょうか。わかる人がいらっしゃれば教えていただきたいです。

A 回答 (2件)

エラー文言はそのものずばりの原因と発生場所を説明しています。


この情報を元にデバックしましょう。

ユーザー入力は常に信用できないものです。
入力値を使う場合は、必ず検証しましょう。
* nextLine を使うならば、事前に hasNextLine で取れるか確認
* String の n 文字目を使うならば、事前に n 文字目まで存在するかを確認
* parseInt を使うならば、事前に整数形式であるか確認

endProgram は input と何ら関係ありませんので、while(!input) {...} が無限に実行されます。
    • good
    • 1
この回答へのお礼

大変わかりやすくご解説していただきありがとうございます。入力値を扱う際の諸所での確認の重要性について学ぶことができました。本当にありがとうございます!

お礼日時:2019/11/23 14:17

java nextInt nextLine 改行


で検索してみましょう
    • good
    • 1
この回答へのお礼

next(); とnextLine();について詳しく知ってなかったんですねお恥ずかしい。。おかげさまで理解できました、ありがとうございます!!

お礼日時:2019/11/23 14:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!