我的代码给出了java.lang.StringIndexOutOfBoundsException,并且命令以非零状态退出了

时间:2019-05-20 02:13:11

标签: java arrays string for-loop char

我是一个初学者,自学成才地尝试通过作业来工作。我试图创建一个程序,该程序将基于输入的第一行(是整数)读取N行代码。输入的其他行由三个字母的行组成,分别为b,s或f。 B和S是唯一被读取的重要字母,因为B为掷骰的玩家增加了1分,超过3个S的玩家输掉了回合,而F则毫无意义。根据阅读的字母,每回合为每个人分配分数。我当前的障碍是char d1 = line [i] .charAt(0)区域,它给我一个退出状态为非零且异常在线程“ main”中的命令java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: 2.
    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;  

我希望它能够读取输入的每一行,并将d1,d2和d3分配给每行中的三个字母,然后可以基于此将点分配给每个人。输入示例为

3
B B S
S B F
B B F

输出 爱丽丝:3,鲍勃:2

2 个答案:

答案 0 :(得分:0)

// promisified fs module const fs = require('fs-extra') const path = require('path') function getConfigurationByFile (file) { const pathToConfigFile = path.resolve('cypress', 'config', `${file}.json`) return fs.readJson(pathToConfigFile) } module.exports = (on, config) => { // `on` is used to hook into various events Cypress emits // `config` is the resolved Cypress config // accept a configFile value or use development by default const file = config.env.configFile || 'environment-2' return getConfigurationByFile(file) } 更改为input.next();

简而言之,input.nextLine()只会给您一个单词,而input.next()则会扫描整行。您也可以尝试自己调试它,看看每个代码块/行中正在发生什么。

注意:请确保输入正确,并且至少每行包含5个字符(input.nextLine())。否则,您将再次得到line[i].charAt(4)。看看为什么会这样:understanding-array-indexoutofbounds-exception-in-java

答案 1 :(得分:0)

input.next()仅读取字母,直到空格为止,而不是input.next() 您可以将其更改为 input.nextLine()

例如:

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