我是一个初学者,自学成才地尝试通过作业来工作。我试图创建一个程序,该程序将基于输入的第一行(是整数)读取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
答案 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);
}