2016-11-15 114 views
0

我收到此异常与这些一起:Java错误java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:在java的 0 .lang.String.charAt(Unknown Source)at RandomWalk.matchingChoice(RandomWalk.java:50)at RandomWalk.main(RandomWalk.java:17)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun .reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(未知来源)在 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到明年这将允许输入,但输入以后会出现同样的错误。任何帮助将得到很多赞赏,谢谢。

回答

0

您在CONSOLE.nextLine()中犯了一个错误;将其替换为CONSOLE.next(); 和您的代码将正确运行。

String colorChoice = CONSOLE.next(); 

更换所有CONSOLE.nextLine()CONSOLE.next()

+0

nextLine()和next()之间的区别只是要插入的新行。 – msagala25

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(); 

希望它有帮助。

+0

这就是问题所在,非常感谢! –

+0

如果我把它正确的请把我的答案检查。谢谢 :) – msagala25

相关问题