sum & compareTo 的静态函数

Jfc 哈哈

好的,基本上这是我的计划,它是关于学生和学生团体的;每个学生都有姓名、身份证和分数/分数;该程序运行良好,但缺少的是 StudentsGroup 类中的 SUM 函数需要是静态的,并采用您需要其总和的“组”参数我的问题是,当我将函数和 ArrayList 设置为静态时,该函数返回两个组的分数组合,但我不知道如何使其工作

//程序正常运行并返回有关所有内容的正确值;当我尝试将 sumOfPoints 函数更改为静态时,我只会收到这些错误

我拥有的两个文件是: 第 1 组:

61662126 劳雷尔 50
61662213 马克 35.5
61662345 雅尼 67
61662127 拉里 27
61662125 凯文 87.5

和第 2 组:

61662126 杰森 70

61662213 乔希 25.5

61662345 鲍比 57

61662127 梅根 17

61662125 德雷克 86.5

正确的输出应该是: Group1 的总分:267.0

Group2总分:256.0

比较 Group1 和 Group2:1

但是当我把它设置为静态时,它在两个组中都返回 523,我不明白我做错了什么

public interface IFile
{
    public void Load();
}





public class Student implements Comparable<Student> 
{

    private int facnum;
    private String name;
    private double points;

    public Student(int fn, String n, double p)
    {
        this.facnum = fn;
        this.name = n;
        this.points = p;
    }

    public void SetFN(int fn)
    {
        this.facnum = fn;
    }

    public void SetName(String n)
    {
        this.name = n;
    }

    public void SetPoints(double p)
    {
        this.points = p;
    }

    public int GetFN()
    {
        return this.facnum;
    }

    public String GetName()
    {
        return this.name;
    }

    public double GetPoints()
    {
        return this.points;
    }

        public boolean equals(Object s)
{
    if (this.GetFN() != ((Student)s).GetFN())
    {
        return false;
    }
        return true;
}

public int compareTo(Object s) 
{
    if(this.GetFN() < ((Student)s).GetFN())
    {
        return -1;
    }
    if(this.GetFN() > ((Student)s).GetFN())
    {
        return 1;
    }
    return 0;
}


    public String toString()
    {
        return "Faculty Number: " + this.facnum + " Name: " + this.name + " Points: " + this.points + " \n";
    }
}




import java.io.*;
import java.util.*;

public class StudentsGroup implements IFile, Comparable<Object>
{
    private String groupname;
    private List<Student>oStudent = new ArrayList<Student>();

    public StudentsGroup(String filename)
    {
        this.groupname = filename;
        Load();
    }

    public void Load(){
        try 
        {   
            Scanner sc=new Scanner(new File(this.groupname));
            while(sc.hasNextLine())
            {
                oStudent.add(new Student(sc.nextInt(),sc.next(),
                        sc.nextDouble()));
            }
        sc.close();
        }
        catch(IOException e)
        {
            System.out.println("Input/Output Error...");
        }
    }


    public void printColl()
    {
        System.out.println(oStudent.toString());
    }

    public  List<Student> sortedListFN()
    {
        Collections.sort(oStudent);
        return oStudent;
    }

    public double sumOfPoints()
    {
        double sum = 0.00;

        for(Iterator<Student> it= oStudent.iterator(); it.hasNext();)
        {
            Student c = it.next();
            sum += c.GetPoints();
        }
        return sum;
    }

    public int compareTo(Object s) 
    {
        if(this.sumOfPoints() < ((StudentsGroup) s).sumOfPoints())
        {
            return -1;
        }
        if(this.sumOfPoints() > ((StudentsGroup) s).sumOfPoints())
        {
            return 1;
        }
        return 0;
    }


    public static void main(String[] args)
    {
        StudentsGroup oGroup1 = new StudentsGroup("Group1.txt");
        oGroup1.printColl();
        System.out.println("Sorted order by FN: " + oGroup1.sortedListFN() + "\n");
        StudentsGroup oGroup2 = new StudentsGroup("Group2.txt");
        System.out.println("Total points of Group1: " + oGroup1.sumOfPoints() + "\n");
        System.out.println("Total points of Group2: " + oGroup2.sumOfPoints() + "\n");
        System.out.println("Comparing Group1 to Group2: " + oGroup1.compareTo(oGroup2));

    }


}

编辑//我尝试的静态方法将 oStudent 更改为静态:

private static List<Student>oStudent = new ArrayList<Student>();

显然将 sum 函数更改为静态并编辑 compareTo 方法:

public static double sumOfPoints(Object s)
    {
        double sum = 0.00;
        s  = new ArrayList<Student>(oStudent);

        for(Iterator<Student> it= ((List<Student>) s).iterator(); it.hasNext();)
        {
            Student c = it.next();
            sum += c.GetPoints();
        }
        return sum;
    }

    public int compareTo(Object s) 
    {
        if(this.sumOfPoints(this) < ((StudentsGroup) s).sumOfPoints(s))
        {
            return -1;
        }
        if(this.sumOfPoints(this) > ((StudentsGroup) s).sumOfPoints(s))
        {
            return 1;
        }
        return 0;
    }

和输出:

System.out.println("Total points of Group1: " + oGroup1.sumOfPoints(oGroup1) + "\n");
        System.out.println("Total points of Group2: " + oGroup2.sumOfPoints(oGroup2) + "\n");
        System.out.println("Comparing Group1 to Group2: " + oGroup1.compareTo(oGroup2));

并且输出开始返回 523

等级

您的静态方法s用该特定实例类的内部对象覆盖

s  = new ArrayList<Student>(oStudent);

我认为你的错误就在这里。这不是您使用类的静态方法的方式。正确的做法是StudentsGroup.sumOfPoints(yourObjectHere)静态方法不应该知道特定实例的任何字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章