2017-04-01 18 views
2
package Medium; 

import java.util.ArrayList; 
import java.util.Scanner; 

public class Demo5 { 
    public static void main(String[] args) { 
     System.out.println("input end when you want to stop:"); 

     ArrayList<Double> arr = new ArrayList<Double>(); 
     while(true){ 
      Scanner in = new Scanner(System.in); 
      //String d = in.nextLine(); 
      double d = in.nextDouble(); 
      arr.add(d); 
      if (d==0) { 
       break; 
      } 
     } 
     Double[] array =(Double[]) arr.toArray(); //I hava already change the type to double 
     int outter,inner,max; 
     for(outter=0;outter<array.length-1;outter++){ 
      max = outter; 
      for(inner=outter+1;inner<array.length;inner++){ 
       if (array[inner]>array[max]) { 
        inner = max; 
       } 
      } 
      double temp =array[outter]; 
      array[outter] =array[inner]; 
      array[inner]=temp; 
     } 
     System.out.println(array); 
    } 
} 

Beschreibung: Finden Sie K-ten größten Element in einem Array. Ich möchte eine ArrayList eingeben und ändern sie in Array, dann verwenden Sie SelectSort.Ausgewählt jedoch ClassCastException auf "Double[] array =(Double[]) arr.toArray();", was ist falsch? Vielen Dank für Ihre Zeit.ein einfacher mit Java kalasCastException

Ausnahme:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Double; 
    at Medium.Demo5.main(Demo5.java:31) 
+0

'Objekt []! = Double []' –

+0

danke..so, wie genau sollte ich es geändert haben? – Lucy

+0

Es gibt eine sehr gute Antwort hier in diesem Link: http://stackoverflow.com/questions/5690351/java-stringlist-toarray-gives-classcastexception –

Antwort

2

Der toArray() -Methode ohne jedes Argument übergeben Ihnen zurück gibt Object[].

Nur um das Problem zu beheben, müssen Sie ein Array als Argument mit Typ und Größe übergeben.

Double[] array = list.toArray(new Double[list.size()]); 
1

Ein anderer Weg, dies zu tun ist:

Double[] array = Arrays.copyOf(arr.toArray(), arr.size(), Double[].class); 

Jede Methode, benötigen Sie den Array-Typ passieren Double[] und seine length in gewisser Weise.