2017-04-04 29 views
0

我需要按升序排序我的Money对象数组,但我得到3个编译器错误。排序我的数组对象时键入错误

TestMoney.java:44: error: bad operand types for binary operator '<' 
      if (list[j] < list[min]) { 
         ^
    first type: Money 
    second type: Money 
TestMoney.java:50: error: incompatible types: Money cannot be converted to int 
      final int temp = list[i]; 
           ^
TestMoney.java:52: error: incompatible types: int cannot be converted to Money 
      list[min] = temp; 
         ^

class TestMoney 
{ 
    public static void main(String [] args) 
    { 
     Money[] list = new Money[15]; 
     for(int i =0; i<15; i++) 
     { 
     int dollar =(int) (Math.random() * 30 + 1); 
     int cent = (int) (Math.random() * 100); 
     list[i] = new Money(dollar, cent); 

     } 
     sortArray(list); 
     printArray(list); 

    } 
    public static void printArray(Money[] list) 
    { 
     for(int i =0; i <list.length; i++) 
     { 

     if(i%10 ==0) 
     { 
      System.out.println(); 
     } 

     System.out.print(" " + list[i]); 
    } 

    } 
    public static void sortArray(Money[] list) 
    { 
    int min; 
    for (int i = 0; i < list.length; i++) { 
     // Assume first element is min 
     min = i; 
     for (int j = i + 1; j < list.length; j++) { 
      if (list[j] < list[min]) { 
       min = j; 

      } 
     } 
     if (min != i) { 
      final int temp = list[i]; 
      list[i] = list[min]; 
      list[min] = temp; 
     } 
     System.out.println(list[i]);// I print the in ascending order 
    } 

    } 
} 

class Money 
{ 
    private int dol; 
    private int cen; 

    Money() 
    { 
     dol = 0; 
     cen = 00; 
    } 
    Money(int dol,int cen) 
    { 
     int remainder = cen % 100; 
     int divisor = cen/100; 
     this.dol = dol+ divisor; 
     this.cen = remainder; 
    } 
    public int getDollors(int dol) 
    { 
     return dol; 
    } 
    public int getCents(int cen) 
    { 
     return cen; 
    } 
    public void setDollors(int d) 
    { 
     dol = d; 
    } 
    public void setCents(int c) 
    { 
     cen = c; 
    } 
    public Money addMoney(Money m) 
    { 
     int d = this.dol + m.dol; 
     int c = this.cen + m.cen; 
     return new Money(d, c); 
    } 
    public int compareTo(Money m) 
    { 

    if(this.dol<m.dol && this.cen<m.cen) 
    return -1; 
    else if(m.dol<this.dol && m.cen<this.cen) 
    return 1; 
    return 0; 


    } 
    public Money subtract(Money m) 
    { 
     int cents1 = this.dol*100 + this.cen; 
     int cents2 = m.dol *100 + m.cen; 
     int cents = cents1 -cents2; 
     return new Money(cen/100,cen%100); 
    } 


    public String toString() 
    { 

     return String.format("$%d.%02d", this.dol,this.cen); 

    } 
} 
+0

需要实现的比较级,以使<评价两点块钱的对象,看看这个例子 - https://www.tutorialspoint.com/java/java_using_comparator.htm –

+3

阅读您发布的代码。 'int temp = list [i]',当list [i]'是'Money'时,显然不起作用。 'int'与'Money'不一样,所以它们不是赋值兼容的。你甚至读过错误信息吗? –

+1

你不能在一个对象('Money')和一个值('int')之间进行转换。你期望做什么? – David

回答

1

那是因为你正试图在两个Money对象与仅适用于数字<运营商相比,你需要replce如下:

if (list[j] < list[min]) {

if (list[j].getDollors() < list[min].getDollors() 
    || (list[j].getDollors() == list[min].getDollors() && list[j].getCents() < list[min].getCents())) { 

此外,你不需要你的getters接受一个参数,他们可以是零参数方法,因为他们只是返回一个值。

+0

非常感谢! – CrazyGal

0

的另一种方式,也许,是用比较接口,就像这样:

public class Money implements Comparator<Money>{ 
int n; //as an example, compare two object by them "n" variable 

@Override 
public int compare(Money o1, Money o2) { 
    int result; 
    if (o1.n > o2.n) 
     result = 1; //greater than case 
    else 
     result = o1.n < o2.n ? -1 // less than case 
       : 0; // equal case 
    return result; 
} 

}

在比较方法,你可以使用GT-LS-EQ的标准基础上的金额。 最后做:

for (int j = i + 1; j < list.length; j++) { 
     if (list[j].compare(list[min]) < 0) { //you ask if is greater, less, 
               //or equal than 0 
      min = j; 
     } 
} 
+0

非常感谢!我很欣赏这 – CrazyGal

+0

我给你一个大拇指..但它不会显示给你,因为我在这里是新的 – CrazyGal

+0

没关系!我很高兴我能帮助你 –