2017-10-09 4 views
0

Lorsque je tente d'obtenir un élément d'une arraylist, il me donne une erreur disantJava - ne peut pas convertir doubler

error: incompatible types: Object cannot be converted to double 
     double highest = numbers.get(0); 

et aussi ce

error: bad operand types for binary operator '<' 
     if(highest < numbers.get(i)){ 

Je suis nouveau à java, mais pas de programmation, donc je ne suis pas vraiment sûr de ce qu'il faut faire car les numéros sont doubles (j'ai vérifié) mais il me donne toujours une erreur quand j'essaie de sélectionner un élément de la matrice ou comparer (highest < numbers.get(i))

Voici le code complet:

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

public class Main { 
    public static void main (String[] args)throws IOException{ 
    boolean keepRunning = true; 
    ArrayList numbers = new ArrayList(); 
    ArrayList sortedNumbers = new ArrayList(); 

    while(keepRunning){ 
     Scanner input = new Scanner(System.in); 
     System.out.print("Do you want to sort the numbers or add a number?"); 
     String answer = input.nextLine(); 

     if(answer.equals("sort")){ 
      double highest = numbers.get(0); 
      for(int i = 0; i < numbers.size(); i++){ 
      if(highest < numbers.get(i)){ 
       highest = numbers.get(i); 
      } 
      System.out.print(numbers.get(i)); 
      } 
      // System.out.println(highest); 
      System.out.println("Bye Bye."); 
      keepRunning = false; 
     }else if(answer.equals("add")){ 
      System.out.print("What number to you want to add?"); 
      numbers.add(Double.parseDouble(input.nextLine())); 
      System.out.println("Added number."); 
     }else{ 
      System.out.println("That is not an option."); 
     } 
    } 
    } 
} 

Répondre

3

Parce que vous n'avez pas utilisé génériques lors de la construction de votre liste ArrayList numbers = new ArrayList(); la machine virtuelle Java permettra cette liste de contenir tout type d'objets. Ainsi, vous devez inclure les génériques ArrayList<Double> numbers = new ArrayList<Double>(); ou coulé lorsque vous récupérez des valeurs de la liste:

double highest = (double) numbers.get(0); 
if(highest < (double) numbers.get(i)){ 
     highest = numbers.get(i); 
} 
1

Lors de la création d'un ArrayList, vous devez identifier le objectType que ce soit Integer, String, Double, ou même sur mesure classes.

ArrayList<ObjectType> list = new ArrayList<ObjectType>(); 

//In this case, the ObjectType is a double, so the code would be: 

ArrayList<Double> list = new ArrayList<Double>(); 

Notez que ArrayList<double> ne peut pas être utilisé en Java (actuellement) depuis double est un type de données primitive . Vous devez donc utiliser sa classe wrapper Double. Cependant Java est capable de convertir automatiquement double en Double et vice versa chaque fois que nécessaire. Ce processus est appelé auto-boxing (ou -unboxing).


Ce que vous faites actuellement, à savoir ne pas identifier le type d'objet, est appelé type cru.

C'est un artefact de l'époque où les génériques n'étaient pas disponibles en Java (en dessous de la version 1.5). L'utilisation est fortement déconseillée.

Même si vous voulez tout mettre à l'intérieur, vous devez utiliser au moins List<Object> au lieu de seulement List.

+0

Vous ne pouvez pas utiliser des mots-clés pour les génériques, ce serait: 'ArrayList list = new ArrayList ();'. De plus, vous devez toujours identifier le type d'objet. –

+1

L'utilisation générique de ** types de données primitifs ** n'est pas ** possible en Java (au moins actuellement). Vous devez utiliser les classes wrapper 'Double' etc. à la place. – Zabuza

+0

Oh ok!Désolé pour ça! – JasperHsu

0

Vous devez spécifier le type de liste de matrices. sinon ce sera un type d'objet par défaut.

ArrayList<Double> numbers = new ArrayList(); 

d'autre lancer la valeur extraite pour doubler.

double highest = (double)numbers.get(0); 
0
double highest = (double)numbers.get(0); 
     for(int i = 0; i < numbers.size(); i++){ 
      int compare = Double.compare(highest, (double)numbers.get(i)); 
     if(compare < 0){ 
      highest = (double)numbers.get(i); 
     } 

     System.out.print(highest+" "); 
     }