簡體   English   中英

對我的對象數組排序時鍵入錯誤

[英]Type errors when sorting my array of objects

我需要按升序對我的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);

   }
}

這是因為您試圖將兩個Money對象與僅適用於Numbers的<運算符進行比較,因此需要替換以下內容:

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接受的說法,他們可以是零項參數的方法,因為他們只返回一個值。

也許另一種方式是使用Comparator接口,如下所示:

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;
        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM