我不断得到一个[Ljava.lang.Object;无法转换为[Ljava.lang.Comparable错误

时间:2015-03-06 04:24:15

标签: java

我正在创建一个实现GenericList类的ListType类。 findMax,findMin和printAll方法由我添加到ListType。我相信问题出在我扩展的Comparable和list =(E [])(new Object [cap])之间。

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());



}

}

2 个答案:

答案 0 :(得分:0)

将您的private E[] list;更改为private Object[] list;并删除构造函数中的(E[])强制转换。

无论您在get方法中使用list[index],您都需要显式转换(E)list[index]之类的实例。

答案 1 :(得分:0)

要修复您遇到的确切异常,只需替换

即可
list = (E[]) (new Object[default_cap]);
使用

在构造函数中

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

这是有效的,因为您已约束E扩展Comparable界面。