繁体   English   中英

Java:如何从对象创建数组,然后在该数组中存储String和double

[英]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.

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