繁体   English   中英

将字符串/整数转换为对象数组

[英]Converting Strings / ints into an Object Array

我对如何将String或int或double值转换为对象数组有疑问

假设我要上两节课。 一类是学生类,一类是数据库类

在学生班里,我有以下内容:

public class Student {
String name;
int grade;
double average;

}

现在在数据库类中,我用代码创建一些新的Student:

Student studentOne = new Student();
System.out.print("Enter student 1's name: ");
studentOne.name = in.next();
Student [] students = new Student [5];

现在,如果我创建:

students[0] = studentOne.name; // It gives me the following error: "Type mismatch: cannot convert from String to Student"

现在,我了解到我无法将字符串转换为对象,但是在google或此处进行搜索后,无法找到有关如何执行此操作的方法。 您可以“投射”到一个对象中吗? 还是.toObject方法? 我很困惑。

谢谢和最好的问候

您的数组是Student类型的, studentOne.nameString类型的,并且不能将String类型的值分配给Student类型的数组。 只能在您的student数组中添加Student类型的对象。

students[0] = studentOne.name; 是无效的。

更改为

students[0] = studentOne;

同样,您首先需要实例化每个Student对象,然后才能对其进行任何操作。

添加students[0] = new Student(); students[0] = studentOne;之前students[0] = studentOne;

您可以执行以下操作来增加可变数量的学生

public class Main {

    public static class Student {
        String name;
        int grade;
        double average;

        public Student()
        {
            name = "Nothing";
            grade = -1;
            average = 0.0;
        }

        public void PrintStudent()
        {
            System.out.println("[" + name + ", " + grade + ", " + average + "]");
        }

    }

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        Student [] students = null;
        System.out.print("Enter How Many Students to Create: ");
        String numberOfStudents = in.nextLine();

        if(numberOfStudents.matches("\\d+"))
        {
            students = new Student [Integer.parseInt(numberOfStudents)];
        }
        else 
        {
            System.err.println("Error when reading user input, exiting...");
            return;
        }

        CreateStudents(students, in);
        PrintStudents(students);


    }//main method

    public static void CreateStudents(Student[] allStudents, Scanner inputOrigin)
    {
        System.out.println("Enter Students as CSV(Comma Seperated Values).\nExample Given: Pete The Dragon, 11, 3.67");
        for(int studentIndex = 0; studentIndex < allStudents.length; studentIndex++)
        {
            System.out.println("Enter information for student #" + studentIndex + ": ");
            String[] input = inputOrigin.nextLine().split(",");
            try{
                //note how each index is a value of the student object in the input string array
                Student newStudent = new Student();
                newStudent.name = input[0];
                newStudent.grade = Integer.parseInt(input[1].replaceAll(" ", ""));
                newStudent.average = Double.parseDouble(input[2].replaceAll(" ", ""));
                allStudents[studentIndex] = newStudent;
            }
            catch(Exception ex)
            {
                System.err.println("Failed to create the " + studentIndex + " due to the following:" + ex.toString());
                allStudents[studentIndex] = new Student();
                    //or we can terminate 
                //return;
            }
        }
    }

    public static void PrintStudents(Student[] allStudents)
    {
        System.out.println("The students are as follows:");
        for(int index = 0; index < allStudents.length; index++)
        {
            System.out.print(index + ": ");
            if(allStudents[index] != null)
                allStudents[index].PrintStudent();
        }
    }
}

这是该程序的一次运行的以下输出,我们添加了5个学生。 需要注意的重要一点是,当我尝试创建Student时遇到异常时,我将添加一个默认的Student对象。 如果您愿意,可以停止添加学生,然后退出。 但是,能够在用户混乱的情况下继续创建学生是一个很好的选择。

输出量

Enter How Many Students to Create: 5
Enter Students as CSV(Comma Seperated Values).
Example Given: Pete The Dragon, 11, 3.67
Enter information for student #0: 
ryan, 4, 3.33
Enter information for student #1: 
harambe the great, 12, 4.32
Enter information for student #2: 
some other person, 6, 2.45
Enter information for student #3: 
donald trump, 1, 0.35
Enter information for student #4: 
another person, incorrect vlaue example, 4.67
The students are as follows:Failed to create the 4 due to the following:java.lang.NumberFormatException: For input string: "incorrectvlaueexample"

0: [ryan, 4, 3.33]
1: [harambe the great, 12, 4.32]
2: [some other person, 6, 2.45]
3: [donald trump, 1, 0.35]
4: [Nothing, -1, 0.0]

您有一个Student对象数组。 因此,您只能将Student实例分配给它的阵列插槽之一。 Student.name是一个String 在我看来,您的意图是将整个Student对象分配给您的数组,而不仅仅是名称。 只需更改:

students[0] = studentOne.name;

students[0] = studentOne;

这将纠正您的类型不匹配错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM