对于ASSIGNRES类型,方法比较未定义

时间:2017-05-23 16:32:10

标签: java collections compiler-errors comparator

在我的主要课程中,如何为compare方法提供参数?因为要求对象输入。 它显示了一个错误:

  

方法compare(String,String)未定义类型ASSIGNRES;

package com.jspiders.Collection;

public class SStudent
{  
    int id;  
    String name;  
    int marks;  

    SStudent(int id,String name,int marks)
    {  

        this.id=id;  
        this.name=name;  
        this.marks=marks;  
    }  
} 

package com.jspiders.Collection;
import java.util.Comparator;

public class Id implements Comparator
{

    public int compare(Object o1,Object o2)
    {  
        Student s1=(Student)o1;  
        Student s2=(Student)o2;  

        if(s1.id==s2.id)  
            return 0;  
        else if(s1.id>s2.id)  
            return 1;  
        else  
            return -1;  
    }  
}

package com.jspiders.Collection;
import java.util.Comparator;

public class Name implements Comparator
{
    public int compare(Object o3,Object o4)
    {  
        Student s3=(Student)o3;  
        Student s4=(Student)o4;  

        return s3.name.compareTo(s4.name);  
    }  
}

package com.jspiders.Collection;

public class Marks
{

    public int compare(Object o5,Object o6)
    {  
        Student s5=(Student)o5;  
        Student s6=(Student)o6;  

        if(s5.marks==s6.marks)  
            return 0;  
        else if(s5.marks>s6.marks)  
            return 1;  
        else  
            return -1;  
    }  
}  

package com.jspiders.Collection;

import java.util.Scanner;

public class ASSIGNRES 
{

    public static void main(String[] args) 
    {
        Scanner sc=new Scanner(System.in);
        /*While(true)
        {
            System.out.println("create id");
            System.out.println("create  name");
            System.out.println("create marks");
            System.out.println("enter the choice");*/
            int choice=sc.nextInt();
            switch(choice)
            {
                case 1:System.out.println("enter the id no");
                       int idd=sc.nextInt();
                       int idd1=sc.nextInt();
                       Object ans=(int)idd;
                       Object ans1=(int)idd1;
                       compare( ans, ans1);
                       break;

                case 2:System.out.println("enter the name");
                       String name1=sc.next();
                       String name2=sc.next();
                       compare(name1,name2);
                       break;
                case 3:System.out.println("enter the marks");
                       int marks1=sc.nextInt();
                       int marks2=sc.nextInt();
                       compare(marks1,marks2);
                       break;           

            }
        }
    }

2 个答案:

答案 0 :(得分:1)

您正在定义Comparator子类,但实际上并未使用它们。

                   String name1=sc.next();
                   String name2=sc.next();
                   compare(name1,name2);

我认为您的意思是在compare中调用Name方法,如下所示:

                   Name nameComparator = new Name();
                   Student student1 = new Student(0, sc.next(), 0);
                   Student student2 = new Student(0, sc.next(), 0);
                   nameComparator.compare(student1,student2);

根据name字段的值,这将返回哪个学生更大。

您已Comparator个子类占用Student个实例,并根据特定字段对它们进行比较。您无法直接使用字段值调用它们,您必须创建Student的实例进行比较。

答案 1 :(得分:0)

compare()类的main方法中使用方法ASSIGNRES时,编译器会在ASSIGNRES类中查找该方法(它在那里找不到它,因此错误)。

查看您的代码,我猜测您想要的是:

  1. 收集单个Student的数据(例如int ansString nameint mark)。
  2. 创建Student个对象
  3. 使用Student方法
  4. 比较Student::compare个对象