2013-02-18 32 views
1

我需要修改數據集以接受可比較對象。測試儀不會編譯,我不知道如何輸出compareTo方法。我應該爲測試者使用ArrayList嗎?提前致謝!將數據集修改爲接受可比較對象

public interface Comparable 
{ 
/** 
Compares this object with another. 
    @param other the object to be compared 
    @return a negative integer, zero, or a positive integer if this object 
    is less than, equal to, or greater than, other 
*/ 
int compareTo(Object other); 
} 

public class DataSetComparable 
{ 
private double sum; 
private Object maximum; 
private Object minimum; 
private int count; 
private Comparable comparer; 

/** 
    Constructs an empty data set with a given measurer. 
    @param aMeasurer the measurer that is used to measure data values 
*/ 
public DataSetComparable(Comparable acomparer) 
{ 
    sum = 0; 
    count = 0; 
    maximum = null; 
    minimum = null; 
    comparer= acomparer; 
} 

/** 
    Adds a data value to the data set. 
    @param x a data value 
*/ 
public void add(Object x) 
{ 
sum = sum + comparer.compareTo(x); 
    if (count == 0 || comparer.compareTo(maximum) < comparer.compareTo(x)) 

    maximum = x; 

    if (count == 0 || comparer.compareTo(minimum) > comparer.compareTo(x)) 

    minimum=x; 
    count++; 

} 


/** 
    Gets the largest of the added data. 
    @return the maximum or 0 if no data has been added 
*/ 
public Object getMaximum() 
{ 
    return maximum; 
} 

/**Gets the smallest of the added data. 
*@return the minimum or 0 if no data has been added 
**/ 

public Object getMinimum() 
{ 
    return minimum; 
} 
} 

public class String implements Comparable { 

private String input; 
private int holder; 

public String(String aninput){ 
    input= aninput; 
    holder=0; 
} 

public String getComparer(){ 
    return input; 
} 

public String getString(){ 
    return input; 
} 

public int compareTo(Object other){ 
    String temp= (String) other; 
    if(input.compareTo(temp)<0){ 
     holder=-1; 
    } 
    else if (input.compareTo(temp)== 0) { 
     holder= 0; 
    } 
    else{ 
     holder= 1; 
    } 
    return holder; 
} 
} 

public class StringTester{ 
public static void main (String [] args){ 

    Comparable c = new String(); 
    DataSetComparable data = new DataSetComparable(c); 

    data.add(new String("Jimmy")); 
    data.add(new String("Amy")); 
    data.add(new String("Melissa")); 
    data.add(new String("Melissa")); 

    String max = (String) data.getMaximum(); 
    String min = (String) data.getMinimum(); 

    System.out.println("Maximum String = " + max); 
    System.out.println("Minimum String = " + min); 
} 
} 

更具體地說,錯誤說:

constructor String in class String cannot be applied to given types.

+0

更具體地說,錯誤說:構造函數類String中的String不能應用於給定的類型。 – Hannah 2013-02-18 00:46:36

回答

2

代碼包括這樣的:

public class String implements Comparable { 
     ... 
} 

你可知道有一個叫String一個標準的Java庫類,它會直接默認導入到每個班級?如果實現你自己的類String,你將得到一些非常混亂的編譯錯誤消息。

我強烈建議您將班級的名稱更改爲其他名稱;例如StringHolder


注意,在技術上你可以定義一個名爲String類。然而,Java用於消除類名稱的規則並不是針對此用例設計的......而且,無論您使用何種規則,您最終都必須使用完全限定名稱引用java.lang.String。而其他人閱讀/修改你的代碼會發現真的很尷尬/煩人。

最好將java.lang包中的類的名稱視爲「保留」,並且不要定義具有相同(非限定)名稱的類。

+0

我將類名更改爲StringHolder,同樣的問題仍然存在。程序找到這樣一行代碼: Comparable c = new String(); – Hannah 2013-02-18 01:45:32

+0

那麼'java.lang.String'實現'java.lang.Comparable'而不是'Comparable'接口。你以前的錯誤的另一個例子。但在這種情況下,解決方法是擺脫* Comparable接口的*版本,並使用標準接口。 – 2013-02-18 04:34:24

+0

ohh我現在明白了!我會盡力解決我的錯誤。謝謝! – Hannah 2013-02-18 04:38:54