J'ai besoin de trier mon tableau d'objets Money dans l'ordre croissant, mais j'obtiens 3 erreurs de compilation.

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
CrazyGal 5 avril 2017 à 01:43

2 réponses

Meilleure réponse

C'est parce que vous essayez de comparer deux objets Money avec l'opérateur < qui s'applique uniquement aux nombres, vous devez répondre à ce qui suit:

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

Avec

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

De plus, vous n'avez pas besoin de votre getters pour accepter un argument, il peut s'agir de méthodes à zéro argument car elles ne renvoient qu'une valeur.

1
Darshan Mehta 7 avril 2017 à 21:18

Une autre façon, peut-être, d'utiliser l'interface Comparator, comme ceci:

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

}

Dans la méthode de comparaison, vous pouvez utiliser les critères de gt-ls-eq en fonction du montant d'argent. Enfin faites:

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
Damián Rafael Lattenero 7 avril 2017 à 18:40