我接到这个例外以及:
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: 0在java.lang.String.charAt(未知来源)at RandomWalk.matchingChoice(RandomWalk.java:50)at RandomWalk.main(RandomWalk.java:17)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)at java.lang.reflect.Method.invoke(未知来源)at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267)
运行此代码时:
import java.util.*;
import java.awt.*;
public class RandomWalk{
public static final Scanner CONSOLE = new Scanner(System.in);
public static void main(String[] args){
System.out.println("Enter Circle Radius (50-400):");
int radius = CONSOLE.nextInt();
while (radius < 50 || radius > 400){
System.out.println("Radius Invalid; Try Again");
System.out.println("Enter Circle Radius (50-400):");
radius = CONSOLE.nextInt();
}
int diameter = radius*2;
int panelD = diameter/4;
System.out.println("Enter Color of Circle (Blue or Green)");
String colorChoice = CONSOLE.nextLine();
boolean test = matchingChoice(colorChoice, "blue");
boolean test2 = matchingChoice(colorChoice, "green");
while(test2 == false && test == false){
System.out.println("Invalid Entry Try Again");
System.out.println("Enter Color of Circle (Blue or Green)");
colorChoice = CONSOLE.nextLine();
test = matchingChoice(colorChoice, "blue");
test2 = matchingChoice(colorChoice, "green");
}
if(test == true){
Color circleColor = Color.BLUE;
} else {
Color circleColor = Color.GREEN;
}
System.out.println("Enter Color of Walk Path (Orange or Red)");
colorChoice = CONSOLE.nextLine();
test = matchingChoice(colorChoice, "orange");
test2 = matchingChoice(colorChoice, "red");
while(test2 == false && test == false){
System.out.println("Invalid Entry Try Again");
System.out.println("Enter Color of Circle (Orange or Red)");
colorChoice = CONSOLE.nextLine();
test = matchingChoice(colorChoice, "orange");
test2 = matchingChoice(colorChoice, "red");
}
if(test == true){
Color pathColor = Color.ORANGE;
} else {
Color pathColor = Color.RED;
}
}
public static boolean matchingChoice(String input, String choice){
input = input.toLowerCase();
char fLI = input.charAt(0);
char fLC = choice.charAt(0);
if(fLI == fLC){
return true;
} else if (input.equals(choice)){
return true;
} else {
return false;
}
}
}
错误发生在
之后System.out.println("Enter Color of Circle (Blue or Green)");
我尝试将nextLine更改为next,这将允许输入,但在输入后会出现相同的错误。任何帮助都会得到很多赞赏,谢谢。
答案 0 :(得分:0)
你在CONSOLE.nextLine();中犯了一个错误,把它替换为CONSOLE.next(); 并且您的代码将正确运行。
String colorChoice = CONSOLE.next();
将所有CONSOLE.nextLine()
替换为CONSOLE.next()
答案 1 :(得分:0)
删除您的扫描仪声明中的最终版本:
public static final Scanner CONSOLE = new Scanner(System.in);
到
public static Scanner CONSOLE = new Scanner(System.in);
然后您将在Scanner
上实例化新的CONSOLE
,因为您将在CONSOLE Variable
上输入不同的数据类型。
System.out.println("Enter Color of Circle (Blue or Green)");
CONSOLE = new Scanner(); // Instantiate new Scanner on your CONSOLE variable
colorChoice = CONSOLE.nextLine();
希望它有所帮助。