Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用while循环用不同类型的对象填充数组列表 public void importStudent(字符串文件名)引发FileNotFoundException{ 文件输入=新文件(“students.txt”); 扫描仪读取文件=新扫描仪(输入); ArrayList tokensList=新的ArrayList(); while(readFile.hasNextLine()){ tokensList.add(readFile.nextLine().split(“,”); String FirstName=(String)tokensList.get(0); String LastName=(String)tokensList.get(1); String phoneNum=(String)tokensList.get(2); 字符串地址=(字符串)tokensList.get(3); double gpa=(double)tokensList.get(4); stringmajor=(String)tokensList.get(5); double CreditLocking=(double)tokensList.get(6); //文本文件的一行中的所有内容 学生s=新学生(名字、姓氏、电话号码、地址、gpa、, 少校(信用卡); peopleBag.添加(s); } readFile.close(); }_Java_Arraylist_While Loop - Fatal编程技术网

Java 如何使用while循环用不同类型的对象填充数组列表 public void importStudent(字符串文件名)引发FileNotFoundException{ 文件输入=新文件(“students.txt”); 扫描仪读取文件=新扫描仪(输入); ArrayList tokensList=新的ArrayList(); while(readFile.hasNextLine()){ tokensList.add(readFile.nextLine().split(“,”); String FirstName=(String)tokensList.get(0); String LastName=(String)tokensList.get(1); String phoneNum=(String)tokensList.get(2); 字符串地址=(字符串)tokensList.get(3); double gpa=(double)tokensList.get(4); stringmajor=(String)tokensList.get(5); double CreditLocking=(double)tokensList.get(6); //文本文件的一行中的所有内容 学生s=新学生(名字、姓氏、电话号码、地址、gpa、, 少校(信用卡); peopleBag.添加(s); } readFile.close(); }

Java 如何使用while循环用不同类型的对象填充数组列表 public void importStudent(字符串文件名)引发FileNotFoundException{ 文件输入=新文件(“students.txt”); 扫描仪读取文件=新扫描仪(输入); ArrayList tokensList=新的ArrayList(); while(readFile.hasNextLine()){ tokensList.add(readFile.nextLine().split(“,”); String FirstName=(String)tokensList.get(0); String LastName=(String)tokensList.get(1); String phoneNum=(String)tokensList.get(2); 字符串地址=(字符串)tokensList.get(3); double gpa=(double)tokensList.get(4); stringmajor=(String)tokensList.get(5); double CreditLocking=(double)tokensList.get(6); //文本文件的一行中的所有内容 学生s=新学生(名字、姓氏、电话号码、地址、gpa、, 少校(信用卡); peopleBag.添加(s); } readFile.close(); },java,arraylist,while-loop,Java,Arraylist,While Loop,所以我有一个文本文件,其中每一行都有我试图创建的学生类的一个对象的所有信息。我要做的是读取文本文件的一行,将信息添加到数组列表中,然后使用该列表来完成我的学生构造函数的所有字段。此方法没有红线,但运行此方法时出现以下错误: 线程“main”java.lang.ClassCastException中的异常: [Ljava.lang.String;无法在以下位置转换为java.lang.String: 步骤1.PeopleBag.importStudent(PeopleBag.java:35)位于

所以我有一个文本文件,其中每一行都有我试图创建的学生类的一个对象的所有信息。我要做的是读取文本文件的一行,将信息添加到数组列表中,然后使用该列表来完成我的学生构造函数的所有字段。此方法没有红线,但运行此方法时出现以下错误:

线程“main”java.lang.ClassCastException中的异常: [Ljava.lang.String;无法在以下位置转换为java.lang.String: 步骤1.PeopleBag.importStudent(PeopleBag.java:35)位于 step1.Demo.main(Demo.java:10)


String.split
返回一个数组,而不是
列表。您可以像

   public void importStudent(String fileName) throws FileNotFoundException{
        File input = new File("students.txt");
        Scanner readFile = new Scanner(input);
        ArrayList<Object> tokensList = new ArrayList<Object>();

        while (readFile.hasNextLine()){

            tokensList.add(readFile.nextLine().split(","));

            String FirstName = (String) tokensList.get(0);
            String LastName = (String) tokensList.get(1);
            String phoneNum = (String) tokensList.get(2);
            String address = (String) tokensList.get(3);
            double gpa = (double) tokensList.get(4);
            String major = (String) tokensList.get(5);
            double creditsTaking = (double) tokensList.get(6);
            //all of the stuff in one line of the text file
            Student s = new Student( FirstName, LastName, phoneNum, address, gpa,
                    major, creditsTaking);
            peopleBag.add(s);
        }
        readFile.close();
    }

String.split
返回一个数组,而不是
列表。您可以像

   public void importStudent(String fileName) throws FileNotFoundException{
        File input = new File("students.txt");
        Scanner readFile = new Scanner(input);
        ArrayList<Object> tokensList = new ArrayList<Object>();

        while (readFile.hasNextLine()){

            tokensList.add(readFile.nextLine().split(","));

            String FirstName = (String) tokensList.get(0);
            String LastName = (String) tokensList.get(1);
            String phoneNum = (String) tokensList.get(2);
            String address = (String) tokensList.get(3);
            double gpa = (double) tokensList.get(4);
            String major = (String) tokensList.get(5);
            double creditsTaking = (double) tokensList.get(6);
            //all of the stuff in one line of the text file
            Student s = new Student( FirstName, LastName, phoneNum, address, gpa,
                    major, creditsTaking);
            peopleBag.add(s);
        }
        readFile.close();
    }

或者,因为split返回数组,所以应该指定数组的索引

String[] tokens = readFile.nextLine().split(",");
String FirstName = tokens[0];
// ...

或者,因为split返回数组,所以应该指定数组的索引

String[] tokens = readFile.nextLine().split(",");
String FirstName = tokens[0];
// ...


你能告诉我们哪一行是第35行吗?你实际上并没有显示中断的代码。PeopleBag.java:35你的问题是一个典型的XY问题,当你的总体方法错误时,你要求解决特定的代码问题,而真正的解决方案是完全使用不同的方法。问题不是如何获得ArrayList要接受另一种类型,您不应该在执行此操作时将数组传递到ArrayList中。只需使用split方法返回的数组,并将
tokensList
ArrayList全部删除即可。实际上,列表与数组看起来是正确的问题。哇,我已经在这方面做了很长时间了,一个nd没有意识到我一直在尝试用数组填充我的ArrayList。如何用常规列表保存Double?gpa和CreditLocking字段都是Double。请告诉我们哪一行是第35行?您并没有实际显示中断的代码。PeopleBag.java:35中的内容是一个典型的XY问题,您在问f或者一个特定代码问题的解决方案,当您的总体方法错误时,真正的解决方案是使用完全不同的方法。问题不在于如何让ArrayList接受不同的类型,而在于您不应该像这样将数组传递到ArrayList中。只需使用从split m返回的数组Method并彻底删除
标记列表
数组列表。实际上,列表与数组看起来是正确的问题。哇,我已经在这方面工作了很长时间,但没有意识到我一直在尝试使用数组填充我的数组列表。如何使用常规列表保存双精度列表?gpa和CreditLocking字段是double如果我使用代币作为数组,我能将GPA和CreditLocking转换为double吗?@Isaiah是的,你会。而不是
list.get(x)
你只需做
tokens[x]
。double GPA=(double)代币[4];给了我一条红线,表示我不能从字符串转换为双精度。我使用的语法错误吗?@Isaiah只需使用
double.valueOf(tokens[4])
。不幸的是,并非所有内容都可以转换为其他内容。@mibac非常感谢。我得到了一个关于tokens[1]的索引越界异常,但我认为这可能与这个问题无关。我将尝试找出一个问题。如果我使用令牌作为数组,我是否能够将GPA和信用卡转换为双倍?@Isaiah是的,你会。而不是
list.get(x)
你只需执行
令牌[x]
。双倍GPA=(双倍)令牌[4];给了我一条红线,表示我不能从字符串转换为双精度。我使用的语法错误吗?@Isaiah只需使用
double.valueOf(tokens[4])
。不幸的是,并非所有内容都可以转换为其他内容。@mibac非常感谢。我得到了一个关于tokens[1]的索引越界异常,但我认为这可能与这个问题无关。我会设法找出那个问题