[英]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.name
是String
类型的,并且不能将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.