2015-03-06 1 views
1

Я создаю класс ListType, который реализует класс GenericList. Методы findMax, findMin и printAll были добавлены мной в ListType. Я считаю, что проблема заключается в том, что между Comparable, который я расширил, и list = (E []) (новый Object [cap]).Я продолжаю получать [Ljava.lang.Object; не может быть применено к [Ljava.lang.Comparable error

import java.util.*; 
import java.io.*; 

public class ListType<E extends Comparable<E>> implements GeneralList<E> 
{ 

private final int default_cap = 10; 
private final int resize_fac = 2; 
private E[] list;  
private int numElements; 


public ListType() 
{ 
    list = (E[])(new Object[default_cap]); 
    numElements = 0; 
} 

public ListType(int cap) 
{ 
    if (cap < 1) 
    throw new IllegalArgumentException(); 

    list = (E[])(new Object[cap]); 
    numElements = 0; 
} 


public void add(E element) 
{ 
    if (numElements == list.length) 
    resize(); 

    list[numElements] = element; 

    numElements++; 
} 

public void add(int index, E element) 
{ 

    if (index > numElements || index < 0) 
    throw new IndexOutOfBoundsException(); 

    if (numElements == list.length) 
    resize(); 

    for (int i = numElements; i > index; i--) 
    list[i] = list[i - 1]; 

    list[index] = element; 

    numElements++; 
} 

public void clear() 
{ 
    for (int i = 0; i<list.length; i++) 
    list[i] = null; 
    numElements = 0; 
} 

public boolean contains(E element) 
{ 
    int index = 0;   
    boolean found = false; 

    while (!found && index < numElements) 
    { 
    if (list[index].equals(element)) 
     found = true; 
    index++; 
    } 

    return found; 
} 


public E get(int index) 
{ 
    if (index >= numElements || index < 0) 
    throw new IndexOutOfBoundsException(); 
    return list[index]; 
} 

public int indexOf(E element) 
{ 
    int index = 0;   
    boolean found = false; 

    while (!found && index < numElements) 
    { 
    if (list[index].equals(element)) 
     found = true; 
    else 
     index++; 
    } 


    if (!found) 
    index = -1; 
    return index; 
} 

public boolean isEmpty() 
{ 
    return (numElements == 0); 
} 


public boolean remove(E element) 
{ 
    int index = 0;   
    boolean found = false; 

    while (!found && index < numElements) 
    { 
    if (list[index].equals(element)) 
    { 
     list[index] = null; 
     found = true; 
    } 
    index++; 
    } 


    if (found) 
    { 
    while(index < numElements) 
    { 
     list[index - 1] = list[index]; 
     index++; 
    } 

    numElements--; 
    } 

    return found; 
} 

public E remove(int index) 
{ 
    if (index >= numElements || index < 0) 
    throw new IndexOutOfBoundsException(); 

    E temp = list[index]; 
    list[index] = null; 
    index++; 

    while(index < numElements) 
    { 
    list[index - 1] = list[index]; 
    index++; 
    } 

    numElements--; 

    return temp; 
} 

private void resize() 
{ 
    int newLength = list.length * resize_fac; 

    E[] tempList = (E[])(new Object[newLength]); 

    for (int index = 0; index < numElements; index++) 
    tempList[index] = list[index]; 

    list = tempList; 
} 

public E set(int index, E element) 
{ 
    if (index >= numElements || index < 0) 
    throw new IndexOutOfBoundsException(); 

    E temp = list[index]; 

    list[index] = element; 

    return temp; 
} 

public int size() 
{ 
    return numElements; 
} 


public String[] toStringArray() 
{ 
    String[] strArray = new String[numElements]; 

    for (int index = 0; index < numElements; index++) 
    strArray[index] = list[index].toString(); 


    return strArray; 
} 

//This method will find the minimum element using the Comparable implemented 
public E findMin() 
{ 
    E min = list[0]; 
    for(int i=1; i<list.length; i++) 
    { 
     if(min.compareTo(list[i]) > 0) 
     min = list[i]; 
    } 

    return min; 
} 

//This method will find the maximium element using the Comparable implemented 
public E findMax() 
{ 
E max = list[0]; 
for(int i=1; i<list.length; i++) 
{ 
    if(max.compareTo(list[i]) < 0) 
     max = list[i]; 
} 
return max; 
} 


//This method print all the elements in the list simply using the for. 
public void printAll() 
{ 
    for(int i=0; i<list.length; i++) 
    System.out.print(list[i] + " "); 
} 

//This is the main class which executes the program 
public static void main(String[] args) throws IOException{ 

    //This will read the elements from the file. 
    File file = new File("document.txt"); 
    Scanner inputFile = new Scanner(file); 
    String line1 = inputFile.nextLine(); 
    String[] arrayLine = line1.split(" "); 

    //This will create the list of the class above. 
    ListType<Double> numbers = new ListType<Double>(); 

    for(int i=0; i<numbers.size(); i++){ 
    numbers.add(Double.parseDouble(arrayLine[i])); 
    } 

    System.out.println("The following elements in the file are: "); 
    numbers.printAll(); 
    System.out.println(" "); 

    System.out.println("The minimium element in the file is " + numbers.findMin()); 
    System.out.println(" "); 
    System.out.println("The maximium element in the file is " + numbers.findMax()); 



} 

} 
+0

В какой строке вы получаете ошибку ?? – Prashant

+0

Возможный дубликат [Ljava.lang.Object; не может быть применено к \ [Ljava.lang.Integer] (http://stackoverflow.com/questions/27591061/ljava-lang-object-cannot-be-cast-to-ljava-lang-integer) – Vitruvius

+0

'Объект' делает не реализуйте сопоставимые вы явно заявили, что E расширяет Comparable –

ответ

0

Измените ваш private E[] list; на private Object[] list; и удалить (E[]) бросок в конструкторах.

Где бы вы ни использовали list[index] в методе получения, вам нужно явно указать экземпляр, например (E)list[index].

+0

Это, безусловно, лучший способ сделать это - на самом деле это так, как реализовано «ArrayList». –

0

Чтобы установить точное исключение Вы столкнулись, просто замените

list = (E[]) (new Object[default_cap]); 

в конструкторе с

list = (E[]) (new Comparable[default_cap]); 

Это работает, потому что вы ограничены E для расширения интерфейса Comparable.

+0

Сопоставимый интерфейс - он не сможет создать его таким образом. –

+0

@EvanKnowles Ваше заявление неясно; однако доказательство находится в пудинге. Я тестировал его класс с помощью этого кода, и он функционирует так, как ожидалось. И это самый прямой, простой ответ на вопрос. – gknicker