gpt4 book ai didi

java - 保龄球得分和异常处理

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:43 24 4
gpt4 key购买 nike

这是计算保龄球得分的代码,我需要帮助来修复此错误:

线程“main”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0

这是我的输入(我将其存储在名为 Bowling.txt 的文本文件中)。

0 4 5 3 4 2 4 4 3 5 0 8 3 1 2 1 6 4 3 4

0 P 5 3 4 2 4 4 3 5 0 8 3 1 2 1 6 4 3 4

游戏有 10 帧,每帧尝试两次,所以我认为文本文件中需要 20 个数字(分数)。

这是我得到的:

The score is 66
The score is 77
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2
at java.lang.String.charAt(Unknown Source)
at pin.main(pin.java:77)

注意:我会给所有有用的答案+1!

import java.io.BufferedReader;   
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class pin
{
static String tries;
public static int value(int index)
{
int i = 0;
if (tries.charAt(index) == 'T')
i = 10;
else if (tries.charAt(index) == 'P')
i =10 -(tries.charAt(index-2)-'0');
else
i = tries.charAt(index)-'0' ;
return i;
}

public static void main(String[] args) throws FileNotFoundException, IOException
{
int score = 0;
int frameIndex;
int i = 0;
FileReader fr = new FileReader("C:/Users/PC4599/Desktop/programming/bowling.txt");
BufferedReader br = new BufferedReader(fr);
tries = br.readLine();

while (tries != null)
{
score = 0;
frameIndex = 0;
i = 0;
while (frameIndex != 10)
{
if (tries.charAt(i)=='T') //Strike
{
score =(score + 10 + value(i + 2) + value(i + 4));
i = i + 2;
}
else if (tries.charAt(i+2)=='P') //Spare
{
score =(score + 10 + value(i + 4));
i = i + 4;
}
else
{
score =(score + (tries.charAt(i)-'0') + (tries.charAt(i + 2)-'0'));//Neither Strike nor Spare
i = i + 4;
}
frameIndex = frameIndex + 1;

}

System.out.println("The score is "+score);
tries = br.readLine();
}
br.close();
fr.close();
}
}

最佳答案

看起来 while (tries != null) 循环运行了三次。您的输入文件末尾可能有一个额外的行,这可能只是空格。

考虑到数据输入的格式,最小正确的乐谱行将有 23 个字符(12 个字符以空格分隔),因此您可以将该检查更改为 while ((tries != null) && (tries.length() >= 23)) 之类的内容。这应该可以解决这个问题,而且无论如何似乎都是一件相当合理的事情。 (如果我不记得如何正确评分保龄球,您可能可以做出适当的调整。)

关于java - 保龄球得分和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com