2012-10-18 7 views
5

Ich bin zugewiesen worden, um ein Programm zu machen, das 100 zufällige ganze Zahlen zwischen 0-25 erhält und sie in einem Array speichert. Ich muss dann 2 Methoden aufrufen, um die Evens und die Chancen zu teilen (sehr typisch). Also versuchte ich die Arraylist Sache (ich es jut gelernt), und es schien in Ordnung (ich war folgende Tutorial und Dinge online), bis ich in diesem Rennen: Unit8.java verwendet unkontrolliert oder unsichere OperationenUnsafe oder ungeprüfte Operationen für ArrayList

Mein Code ist dies:

import java.util.*; 
    import java.awt.*; 

    public class Unit8 
    { 
public static void main (String [] args) 
{ 
    //create an array for original 100 integers 
    //create a 2D array for evens and odds 
    //split them up using 2 methods 

    int[] originalArray = new int[100]; 
    ArrayList even = new ArrayList(1); 
    ArrayList odd = new ArrayList(1); 

    for (int x = 0; x < originalArray.length; x++) 
    { 
     originalArray[x] = (int)(Math.random() * 25); 
    } 

    evensDivider(originalArray, even); 
    oddsDivider(originalArray, odd); 
} 

public static void evensDivider (int[] e, ArrayList even) 
{ 


    for (int y = 0; y < e.length; y++) 
    { 
     if (e[y]%2 == 0) 
      even.add(e[y]); 
    } 

    System.out.println("The evens are: " + even); 
} 

public static void oddsDivider (int[] o, ArrayList odd) 
{ 


    for (int z = 0; z < o.length; z++) 
    { 
     if (o[z]%2 == 1) 
      odd.add(o[z]); 
    } 
} 

}

bei den auftretenden Fehler speziell bei: even.add(e[y]); und odd.add(o[z]);

Bitte helfen Sie mir damit, ich habe mein Bestes versucht, um es klar und einfach zu verstehen.

+0

bevorzugen die Antwort hier angegebenen Link unten. https://Stackoverflow.com/a/44243684/6499408 –

Antwort

10

Dies ist, weil Sie ArrayList mit raw type verwenden. Und Sie fügen einen bestimmten Typ hinzu.

Rohtyp ArrayList würde Element des Typs Objekt erwarten. Wenn Sie einen anderen Typ hinzufügen, weiß der Compiler nicht genau, welchen Typ Sie speichern. Also, es gibt Ihnen unchecked or unsafe operations um Sie zu warnen, dass Sie etwas falsch machen könnten.

sollten Sie besser erstellen Generic Arraylist: -

List<Integer> evenNumbers = new ArrayList<Integer>(); 

Außerdem ist es in Ihrer method Signatur ändern: -

public static void evensDivider (int[] e, List<Integer> evenNumbers) 

PS: - Sie sollten immer eine Referenz von interface type haben wenn du eine hast.ich meine List anstelle von ArrayList

+0

Danke, ich; m noch relativ neu zu Java und vor allem ArrayLists und Listen Noch einmal, vielen Dank! – Timo

+1

@Timo .. Gern geschehen. Und mach dir keine Sorgen. Du wirst Dinge allmählich bekommen, wenn du mehr übst. –

3

Es ist zu diesem

ArrayList even = new ArrayList(1); 

complaing haben Sie die nicht-generische Version von ArrayList gibt. Ändern Sie es zu

List<Integer> even = new ArrayList<Integer>(1); 

Das ist generisch und typsicher.

Ebenfalls (als Randnotiz) gibt der Wert 1 in new ArrayList(1); die Anfangskapazität der Liste an. Diese Funktion ist für Situationen gedacht, in denen Sie wissen, dass Sie der Liste eine große Anzahl von Elementen hinzufügen werden. In diesem Fall würden Sie eine größere Zahl angeben, um den Overhead der Größenänderung zu vermeiden. Einen kleinen Wert (wie 1) zu übergeben, macht keinen Sinn.

+0

Vielen Dank auch! Ich habe noch nicht das Votum-Ding (nicht genug Ruf), aber ich schätze Ihre Antwort! – Timo

+0

@Timo: Gern geschehen :) –

1

Statt dessen verwenden:

ArrayList even = new ArrayList(1); 

versuchen Sie dies:

  • Diese List kann nur halten Zahlen:

    List<Integer> evens = new ArrayList<Integer>(50); 
    

    Hier sind die Vorteile (Ganzzahlen, eigentlich auch als Ints bezeichnet), die Ich gehe davon aus, dass die Warnung kommt.

  • Es hat einen Plural Namen, der besser widerspiegelt, was es ist, eine Liste
  • Es instanziiert sich mit einer Größe von 50 (anstatt 1), die ungefähr ist, wie groß Sie erwarten, dass es sein wird.
1

Ersetzen Sie diese ArrayList even = new ArrayList(1); mit ArrayList<Integer> even = new ArrayList<Integer>(1);

Oder @SuppressWarnings("rawtypes") auf der Oberseite des Attributs/Methode/Klasse hinzufügen.

+0

Ich habe so etwas versucht, aber es würde nicht laufen, aber es ist jetzt in Ordnung! Ich hab es geschafft. Vielen Dank! – Timo

Verwandte Themen