我的代码给出了java.lang.StringIndexOutOfBoundsException,命令以非零状态退出
我是一个初学者,自学成才,试图通过作业来完成工作。我正在尝试创建一个程序,该程序将根据输入的第一行(整数)读取N行代码。其他输入行由三个字母组成,分别为b、s或f。B和S是唯一被读取的重要字母,因为B给翻滚的球员加了一分,超过3个S,球员失去回合,F的意思是什么。根据阅读的字母,每个人每回合都会获得分数。我当前的障碍是char d1=行[i].charAt(0)区域,它给我一个退出的命令,线程“main”java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:2。我的代码给出了java.lang.StringIndexOutOfBoundsException,命令以非零状态退出,java,arrays,string,for-loop,char,Java,Arrays,String,For Loop,Char,我是一个初学者,自学成才,试图通过作业来完成工作。我正在尝试创建一个程序,该程序将根据输入的第一行(整数)读取N行代码。其他输入行由三个字母组成,分别为b、s或f。B和S是唯一被读取的重要字母,因为B给翻滚的球员加了一分,超过3个S,球员失去回合,F的意思是什么。根据阅读的字母,每个人每回合都会获得分数。我当前的障碍是char d1=行[i].charAt(0)区域,它给我一个退出的命令,线程“main”java.lang.StringIndexOutOfBoundsException:字符串索
int num=input.nextInt(); 字符串[]行=新字符串[num]
for (int i=0; i<num; i++){
ine[i] = input.next();
// Creating characters for the dice
char d1 = line[i].charAt(0);
char d2 = line[i].charAt(2);
char d3 = line[i].charAt(4);
while (aliceScore<3){
//D1 die score - alice
if (d1 == 'b')
aliceScore++;
else if (d1 == 's')
aliceShotgun++;
else
//D2 die score - Alice
if (d2 == 'b')
aliceScore++;
else if (d2 == 's')
aliceShotgun++;
else
//D3 die score - Alice
if (d3 == 'b')
aliceScore++;
else if (d2 == 's')
aliceShotgun++;
else
if (aliceShotgun == 3)
aliceScore = 0;
break;
输出
爱丽丝:3,鲍勃:2更改输入
到输入.nextLine()
简而言之,input.next()
只会给你一个单词,而input.nextLine()
会扫描整行。您还可以尝试自己调试它,并查看每个代码块/代码行中发生了什么
注意:确保输入正确,每行至少包含5个字符(行[i].charAt(4)
)。否则,您将再次获得java.lang.StringIndexOutOfBoundsException
。看看发生这种情况的原因:input.next()
只读取空格以内的字母,所以不要读取input.next()
您可以将其更改为input.nextLine()
ex:
for (int i=0; i<num; i++){
ine[i] = input.nextLine();
String [] a=ine[i].split(" ");
char d1 = a[0].charAt(0);
char d2 = a[1].charAt(0);
char d3 = a[2].charAt(0);
}
for(int i=0;iine[i]=input.next();
-如果它说字符串索引超出范围:2,可能会更改为line[i]=input.nextLine():
。
你确定它不是行[i]。字符(2)
?你能显示控制台输入和错误吗?注意“重复”谈到数组索引超出范围。但当在字符串中建立索引时,该内容也非常适用。
for (int i=0; i<num; i++){
ine[i] = input.nextLine();
String [] a=ine[i].split(" ");
char d1 = a[0].charAt(0);
char d2 = a[1].charAt(0);
char d3 = a[2].charAt(0);
}