泛型数组转换错误
泛型数组转换异常
3
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at Generic.GenericStack.main(GenericStack.java:13)
代码:
package Generic;
public class GenericStack<E>
{
private E[] list = (E[]) new Object[2];
public static void main(String[]args)
{
GenericStack<String> example = new GenericStack<String>();
example.push("red");
example.push("blue");
example.push("green");
System.out.println(example.getSize());
System.out.println(example.list.length);//这的问题
System.out.println(example.peek());
}
public int getSize()
{
int size = 0;
for(E element:list)
{
if(element!=null)
{
size++;
}
}
return size;
}
public E peek()
{
return list[getSize()-1];
}
public void push(E element)
{
if(getSize()==list.length)
{
E[] list1 = (E[])new Object[list.length*2];
System.arraycopy(list, 0, list1, 0, list.length);
list=list1;
list[getSize()]=element;
}
else
{
list[getSize()]=element;
}
}
public boolean isEmpty()
{
boolean isEmpty = false;
if(getSize()==0);
{
isEmpty = true;
}
return isEmpty;
}
}
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
at Generic.GenericBinarySearch.binarySearch(GenericBinarySearch.java:22)
at Generic.GenericBinarySearch.main(GenericBinarySearch.java:9)
代码:
package Generic;
public class GenericBinarySearch
{
public static void main(String[] args)
{
Integer[]example = {1,2,3,4,5,6,7,8,9};
Integer a = new Integer(3);
System.out.println(GenericBinarySearch.binarySearch(example,a));
}
public static <E extends Comparable<E>> int binarySearch(E[] list,E key)
{
int search = -1;
int index = 0;
while(list.length>1)
{
int left = 0;
int right = list.length-1;
if(list[list.length/2].compareTo(key)>0)
{
right = list.length/2-1;
E[] list1 = (E[])new Object[right-left+1];//这的问题
System.arraycopy(list, left, list1, 0, list1.length);
list = list1;
}
else if(list[list.length/2].compareTo(key)==0)
{
search=list.length/2+index;
break;
}
else
{
left = list.length/2+1;
index = list.length/2+1;
E[] list1 = (E[])new Object[right-left+1];
System.arraycopy(list, left, list1, 0, list1.length);
list = list1;
}
}
if(list.length==1)
{
if(list[0].compareTo(key)==0)
{
search = index;
}
}
return search;
}
}
------解决思路----------------------
使用数组的length属性时声明类型和实际类型必须相同
只是实现一个栈的话,还是用LinkedList保存元素吧
------解决思路----------------------
楼主要学会贴代码
------解决思路----------------------
不要把泛型和数组混合在一起,用LIST啦
3
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at Generic.GenericStack.main(GenericStack.java:13)
代码:
package Generic;
public class GenericStack<E>
{
private E[] list = (E[]) new Object[2];
public static void main(String[]args)
{
GenericStack<String> example = new GenericStack<String>();
example.push("red");
example.push("blue");
example.push("green");
System.out.println(example.getSize());
System.out.println(example.list.length);//这的问题
System.out.println(example.peek());
}
public int getSize()
{
int size = 0;
for(E element:list)
{
if(element!=null)
{
size++;
}
}
return size;
}
public E peek()
{
return list[getSize()-1];
}
public void push(E element)
{
if(getSize()==list.length)
{
E[] list1 = (E[])new Object[list.length*2];
System.arraycopy(list, 0, list1, 0, list.length);
list=list1;
list[getSize()]=element;
}
else
{
list[getSize()]=element;
}
}
public boolean isEmpty()
{
boolean isEmpty = false;
if(getSize()==0);
{
isEmpty = true;
}
return isEmpty;
}
}
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
at Generic.GenericBinarySearch.binarySearch(GenericBinarySearch.java:22)
at Generic.GenericBinarySearch.main(GenericBinarySearch.java:9)
代码:
package Generic;
public class GenericBinarySearch
{
public static void main(String[] args)
{
Integer[]example = {1,2,3,4,5,6,7,8,9};
Integer a = new Integer(3);
System.out.println(GenericBinarySearch.binarySearch(example,a));
}
public static <E extends Comparable<E>> int binarySearch(E[] list,E key)
{
int search = -1;
int index = 0;
while(list.length>1)
{
int left = 0;
int right = list.length-1;
if(list[list.length/2].compareTo(key)>0)
{
right = list.length/2-1;
E[] list1 = (E[])new Object[right-left+1];//这的问题
System.arraycopy(list, left, list1, 0, list1.length);
list = list1;
}
else if(list[list.length/2].compareTo(key)==0)
{
search=list.length/2+index;
break;
}
else
{
left = list.length/2+1;
index = list.length/2+1;
E[] list1 = (E[])new Object[right-left+1];
System.arraycopy(list, left, list1, 0, list1.length);
list = list1;
}
}
if(list.length==1)
{
if(list[0].compareTo(key)==0)
{
search = index;
}
}
return search;
}
}
------解决思路----------------------
使用数组的length属性时声明类型和实际类型必须相同
只是实现一个栈的话,还是用LinkedList保存元素吧
------解决思路----------------------
楼主要学会贴代码
public class Demo {像楼主的代码层级多,又没有排版,没法看。
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("no args.");
}
}
}
------解决思路----------------------
不要把泛型和数组混合在一起,用LIST啦