[英]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.