为什么我的班级出现NoSuchElementException错误

时间:2014-07-25 10:13:45

标签: java android list object arraylist

我有这个课程,他应该打开一个文件,里面有一些问题,答案是肯定的。 问题是当它在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();
            }
    }
}

2 个答案:

答案 0 :(得分:0)

你在循环中使用了read.next()3次,这意味着你超过了输入的结尾,因此NoSuchElementException。

只使用一次并将其分配给循环内的局部变量,这样您可以在循环的后期再次使用该值时使用该值。

答案 1 :(得分:0)

我建议您在read.next()循环中只执行一次while(read.hasNext())。分析读取元素,执行必要任务并重新运行循环,直到while(read.hasNext())失败。通过这种方式,您可以确保永远不会执行超出列表大小的读取。