[英]Java : How to create an array from object then store String and double in that array
我想从对象创建一个数组,然后以2种不同类型的日期存储在该数组中,我仍在学习Java,这是我的任务,我搜索了很多次,却一无所获,所以我需要您的帮助:D the base类:
package com.matcho.task;
public class Subject {
String name;
Double grade;
public Subject(String myname, double myGrade) {
name = myname;
grade = myGrade;
}
public void printermethod() {
System.out.println("Your Subject is " + name + " and ur grade is "
+ grade);
}
}
这是主要的类:
package com.matcho.task;
import java.util.Scanner;
public class subjectUseing {
public static void main(String[] args) {
String studentName = "";
double studentGrade = 0;
Subject object1 = new Subject(studentName, studentGrade);
Scanner input = new Scanner(System.in);
System.out.print("Please, Enter the Size of the Array : ");
int arraySize = input.nextInt();
Subject[] gradeArray = new Subject[arraySize];
for (int i = 0; i < gradeArray.length; i += 2) {
if ((i + 1) % 2 == 0) {
System.out.println("Please, Enter Subject Number Grade");
studentGrade = input.nextDouble();
studentGrade = object1.grade;
gradeArray[i] = object1.grade;
//Error said (cannot convert from Double to Subject)
//object1.grade = (Double)gradeArray[i];
//gradeArray[i] = object1.grade;
continue;
} else {
System.out.println("Please, Enter Subject Number Name");
studentName = input.next();
studentName = object1.name;
//Error said (cannot convert from String to Subject)
gradeArray[i] = new Subject(object1.name, object1.grade);
// gradeArray[i] = object1.name;
// gradeArray[i] = new String(object1.name); // Failed T_T
}
}// For End
for (int i = 0; i < gradeArray.length; i += 2) {
System.out.println("Your Grade in each Subject is : "
+ gradeArray[i] + " " + gradeArray[i + 1]);
}// For End
}
}
我尝试了许多方法并进行了很多次搜索,但没有找到任何东西,所以请我帮忙,因为此错误[无法从Double转换为Subject]使我大失所望:D
基本上,您需要简化循环:在循环的每次迭代中,询问主题名称和年级,然后创建一个对象来存储它们两者:
for (int i = 0; i < gradeArray.length; i++) {
System.out.println("Please enter the subject name");
String name = input.next();
System.out.println("Please enter the subject grade");
double grade = input.nextDouble();
gradeArray[i] = new Subject(name, grade);
}
注意循环内变量的声明-循环外不需要变量,所以不要在循环内声明。
然后,为了显示,您将使用:
for (Subject grade : gradeArray) {
System.out.println(grade);
}
同样,无需跳过数组中的所有其他项-数组中的每个元素都是对Subject
对象的引用,该对象包含名称和成绩。
(或将“ getName
和“ getGrade
方法添加到“ Subject
以便您可以自定义输出。)
请注意,使用Scanner
可能会有些nextDouble()
-例如, nextDouble()
不会占用换行符,这可能意味着在读取下一个名字时会得到一个空字符串。 您可能需要考虑一次读取一行并使用Double.parseDouble
来解析字符串。 (或使用NumberFormat
。)
数组是一个容器对象,包含固定数量的单个类型的值
您不能创建一个数组,然后用其他类型的值填充它。 在您的代码中,您创建了一个Subject数组,然后其所有元素都应为Subject类型,Subject类的成员此时无关紧要,该数组应处理Subject类型的Elements。 在您的逻辑“业务需求”中,要求您创建一个保存学生科目值及其成绩的数组,然后说“确定”轻松任务,然后创建该数组,然后尝试存储成绩和对象名称数组中的Subject Class说“ Object是引用类型,因此是它的成员”,但不! 不是; 您的数组应仅包含主题元素,以查看正确的解决方案:
Scanner in = new Scanner(System.in);
System.out.println("Enter array size");
int size = in.nextInt();
Subject[] subjects = new Subject[size];
String name;
Double grade;
Subject object;
for(int i =0; i<size; i++)
{
System.out.println("Enter Subject name: ");
name=in.next();
System.out.println("Enter Subject Grade: ");
grade = in.nextDouble();
object = new Subject(name,grade);
subjects[i] = object;
}
for(int i=0; i<size; i++)
System.out.println("Subject name is "+subjects[i].name + " Grade is "+subjects[i].grade);
}
您创建了一个Subject对象数组,但是正在存储Double。
studentGrade = object1.grade;
gradeArray[i] = object1.grade;
您应该像这样存储它:
object1.grade = studentGrade;
gradeArray[i].grade = object1.grade;
但是正如已经提到的,您不需要那么多局部变量。 您可以赞一下:
gradeArray[i].grade = input.nextDouble();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.