问题: 你的骑行在这里
众所周知,每个好彗星背后都是不明飞行物。这些不明飞行物经常来自地球上的忠实支持者。不幸的是,他们在每次旅行中只有空间来接一组粉丝。然而,他们确实让团队提前知道将通过一个聪明的方案为每颗彗星拾取:他们为彗星选择一个名称,以及该组的名称,可以用来确定它是否是一个特定的团体转向(你认为谁是彗星的名字?)。匹配方案的细节如下:你的工作是编写一个程序,它取一个组和一个彗星的名字,然后确定该组是否应该使用该彗星后面的UFO。
组的名称和彗星的名称都按以下方式转换为数字:最终的数字只是名称中所有字母的乘积,其中“A”是1和“Z”例如,组“USACO”将是21 * 19 * 1 * 3 * 15 = 17955.如果组的数字mod 47与彗星的数字mod 47相同,那么你需要告诉小组得到准备! (请记住,“a mod b”是除以b后剩余的余数; 34 mod 10为4.)
写一个程序,它读入彗星的名称和组的名称,并根据上述方案确定名称是否匹配,如果匹配则打印“GO”,否则打印“STAY”。组和彗星的名称将是一串大写字母,没有空格或标点符号,最多6个字符。
以下是我的问题代码:
import java.io.*;
import java.util.*;
public class ride {
public static void main(String[] args) throws IOException {
BufferedReader f = new BufferedReader(new FileReader("ride.in"));
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("ride.out")));
ArrayList<String> inputs = new ArrayList<String>(10);
StringTokenizer st = new StringTokenizer(f.readLine());
for (int i=0; i<5; i++)
{
inputs.set(i, st.nextToken());
}
ArrayList<String> inputs2 = new ArrayList<String>(10);
st = new StringTokenizer(f.readLine());
for (int j=0; j<5; j++)
{
inputs2.set(j, st.nextToken());
}
String[] alphabet = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
ArrayList<String> alphabet2 = new ArrayList<String>(30);
{
for (int a = 0; a<alphabet.length; a++)
{
alphabet2.set(a, alphabet[a]);
}
}
int product1 = 1;
for (int k=0; k<inputs.size(); k++)
{
String letter = inputs.get(k);
product1 = product1*(alphabet2.indexOf(letter)+1);
}
int product2 = 1;
for (int l=0; l<inputs2.size(); l++)
{
String letter2 = inputs2.get(l);
product2 = product2*(alphabet2.indexOf(letter2)+1);
}
if (product1%47 == product2%47)
{
out.print("GO");
}
else
{
out.print("STAY");
}
out.close();
f.close();
}
}
然而,当我运行此时,评分者返回:
运行1:执行错误:程序退出,退出状态为“1”。
------ Data for Run 1 [length=14 bytes] ------
COMETQ
HVNGAT
----------------------------
Your program printed data to stderr. Here is the data:
-------------------
Exception_in_thread_"main"_java.lang.IndexOutOfBoundsException:_Index:_0,_Size:_0
at_java.util.ArrayList.RangeCheck(ArrayList.java:547)
at_java.util.ArrayList.set(ArrayList.java:337)
at_ride.main(Unknown_Source)
-------------------
任何人都可以帮助指出我的问题吗?
答案 0 :(得分:0)
set
上的List
方法需要there already be an element at the index before the set is called for that index。
因此,在空列表中执行set
时,此代码正在破坏:
ArrayList<String> inputs = new ArrayList<String>(10);
StringTokenizer st = new StringTokenizer(f.readLine());
for (int i=0; i<5; i++)
{
inputs.set(i, st.nextToken());
}
更合适的使用方法是add
:
ArrayList<String> inputs = new ArrayList<String>(10);
StringTokenizer st = new StringTokenizer(f.readLine());
for (int i=0; i<5; i++)
{
inputs.add(i,st.nextToken());
}