2017-05-23 2 views
0

내 주 클래스에서 compare 메서드에 인수를 제공하려면 어떻게합니까? 왜냐하면 객체 입력을 요구하기 때문입니다.비교 메서드가 형식 ASSIGNRES에 대해 정의되지 않았습니다

The method compare(String, String) is undefined for the type 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;   

      } 
     } 
    } 
+1

오류 메시지가 표시됩니다. 'ASSIGNRES' 내에 정의 된'compare (String, String)'메서드가 없습니다. 위에서 정의한'compare (Object, Object)'중 하나를'ASSIGNRES'로 옮기려고하면'Integer'를'Student'로 변환 할 수 없으므로'ClassCastException'으로 끝납니다. – Turing85

+0

그래서 내가해야 할 일을 극복하기 위해서? –

+0

사례 2와 3에서 무엇을 비교합니까? 객체를 사용해야합니까? 그렇다면 객체는 무엇입니까? – MaxZoom

답변

0

ASSIGNRES 클래스의 main 방법 내부 방법 compare()을 사용하여 ASSIGNRES 클래스의 메소드를 찾습니다 컴파일러가 (이 때문에, 거기에 그것을 발견하지 않습니다 그것은 나에게 오류를 보여줍니다 오류).

코드를 보면, 나는 당신이 원하는 것은 을 추측입니다 :

  1. 는 하나의 Student (같은 int ans, String nameint mark)에 대한 데이터를 수집합니다.
  2. 당신이 그들을 사용하여 실제로 Comparator 서브 클래스를 정의하지만,하지 않을 Student::compare 방법
+0

비교 방법에 대해 obj 형식 입력을 요청하여 int를 mainclass의 개체 유형으로 변환하는 방법을 입력합니다. –

+0

'public int compare (Student s1, Student s2)'또는'좋은 생각이 아닌'public int compare는'Student' 객체를'Object'로 전달하고'compare '안에'Student'에 던져 넣어야합니다.)' – syntagma

1

를 사용하여 Student 객체의 비교 Student 객체 (들)를 만듭니다.

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

난 당신과 같이, Namecompare 메소드를 호출하는 것을 의미 가정

    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의 인스턴스를 만들어야합니다.