我有这个课程,他应该打开一个文件,里面有一些问题,答案是肯定的。 问题是当它在ArrayList中写入时。我尝试了所有类型的ArrayLists,LinkedLists,甚至是矢量。 文件的第一部分,如问题和答案的nr,它没有任何问题。但是当我想将这些答案存储在一个列表中,这样我就可以将该列表保存在一个对象中,它将无法工作。
如果有人可以帮助解决这个问题,或者知道一个更好的方法,那么将一个未知的字符串nr保存到一个对象列表中就会出现史诗。
文件格式为:
A question,3,yes,no,maybe
Another question,4,yes,maybe,no,why not
我的班级:
public class GetSurvey {
public static String intrebare;
static int raspunsuri;
public static int i = 1;
static String holder;
//static String[] rasp = new String[250];
static List<String> rasp = new LinkedList<String>();
public static SurveyClass[] obj = new SurveyClass[250];
public static void loadSurvey()
{
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+File.separator+"Survey.dat");
if(!file.exists()){
try {
file.createNewFile();
}
catch (IOException e) {
e.printStackTrace();
}
}
if(file.exists()){
try {
Scanner read = new Scanner(file);
read.useDelimiter(",");
while (read.hasNext())
{
intrebare = read.next();
String raspunsuri1 = read.next();
//Log.w("Date",String.valueOf(raspunsuri));
//obj[i].setNrRasp(raspunsuri);
for(int j = 0;j < 3;j++)
{
Log.w("Date",String.valueOf(j));
rasp.add(j,read.next());
}
String[] stringArr = rasp.toArray(new String[rasp.size()]);
Log.w("Date",stringArr[i]);
//obj[i].setRaspunsuri(rasp);
rasp.clear();
i++;
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
你在循环中使用了read.next()3次,这意味着你超过了输入的结尾,因此NoSuchElementException。
只使用一次并将其分配给循环内的局部变量,这样您可以在循环的后期再次使用该值时使用该值。
答案 1 :(得分:0)
我建议您在read.next()
循环中只执行一次while(read.hasNext())
。分析读取元素,执行必要任务并重新运行循环,直到while(read.hasNext())
失败。通过这种方式,您可以确保永远不会执行超出列表大小的读取。