2013-08-21 2 views
2

Pourquoi cela est-il incorrect? Je ne peux pas utiliser ajouter, je ne suis pas sûr de savoir comment. Certaines documentations java disent que j'ai besoin d'ajouter (index, data) mais d'autres ne sont que des add (data) et le compilateur le supporte aussi. Il y a une erreur avec mon type de données.Utilisation d'une classe personnalisée avec ArrayLists

import java.util.*; 
public class graph1 { 

    public static void main (String[] args){ 
     ArrayList<Node> web = new ArrayList<Node>();  
     web.add(0, "google", new int[]{1,2}); 

    } 
} 

Node.java:

public class Node { 
     int i; 
     String title; 
     int[] links;  

     Node(int i, String title, int[] links){ 
      this.i = i; 
      this.title = title; 
      this.links = links; 
     } 
    } 
+0

Juste pour vous aider, travaillez à travers les bases de la langue ici: http://docs.oracle.com/javase/tutorial/reallybigindex.html. Vous avez mentionné que votre autre question n'était pas trop avancée, mais vous travaillez sur des choses comme la création et l'utilisation d'objets avant de comprendre les bases comme les tableaux. Concentrez-vous sur les conditions, les boucles, les tableaux, puis passez aux objets/classes. –

+1

J'ai en fait environ un an d'expérience avec Java Je suis juste très mauvais en programmation. –

+1

Retournez aux bases et apprenez les types primitifs, conditionnels, boucles et tableaux. Sans eux, vous allez juste être plus confus avec des objets, des classes et autres –

Répondre

4

Vous oubliez d'inclure new Node(...) l'intérieur de add(...) de la méthode ArrayList puisque vous n'êtes pas ajouter la combinaison d'un int, une chaîne et un array of int à ArrayList, mais vous ajoutez plutôt un objet Node. Pour ce faire, l'objet de nœud doit être explicitement créé et ajouté:

web.add(new Node(0, "google", new int[]{1,2})); 
+1

Oh ok je n'étais pas sûr de la manière dont java gérait les types de données comme ça. Je ne savais pas si cela impliquait que ce que je mettais était un nœud ou non. –

+0

@ YKQ56: ce n'est pas le cas. Le compilateur n'a aucune idée du type d'objet que vous essayez d'ajouter jusqu'à ce que vous le disiez explicitement. Le compilateur doit ensuite vérifier que c'est le type * correct * de l'objet. –

3

Utilisez ceci:

web.add(new Node(0, "google", new int[] {1, 2})); 
2

Vous avez un arraylist de nœuds, mais essayez d'ajouter un tas de variables aléatoires. Vous devez utiliser ces variables pour créer un nœud, puis l'ajouter.

web.add(new Node(0, "google", new int[]{1,2})); 
3

Vous devez faire le nœud comme celui-ci

Node node = new Node(i, title, links); 
web.add(node); 
+2

Pour vous aider à expliquer ce code. Ce que vous avez est une liste de tableaux de nœuds. Un nœud est un objet qui a un int i, un titre String et un tableau d'ints. Ainsi, lorsque vous ajoutez à votre liste, vous voulez réellement ajouter un nœud, plutôt que d'autres données. Vous pouvez le faire en utilisant exactement ce que dit Andrew. Il crée un nouveau noeud nommé "node", puis l'ajoute à la liste.Pour que cela fonctionne avec les valeurs que vous avez fournies, vous avez besoin de: Noeud node = new node (0, "google", new int [] {1,2}); web.add (noeud); – ThePerson

0

Votre classe personnalisée doit être instantiated pour l'ajouter à la liste de tableaux. Pour ce faire, utilisez web.add(new Node(0, "google", new int[]{1,2}));.

Dans votre cas, vous avez utilisé web.add(0, "google", new int[]{1,2});, ce compilateur Java compris comme vous essayiez d'ajouter 3 objets à la fois, donc le compilateur s'est plaint que quelque chose ne va pas avec votre code.

De plus, vous devriez considérer implementing (overriding) personnalisé compare(o1, o2) si vous avez besoin de trier la matrice, car la valeur par défaut Collections.sort(list) ne sait pas comment classer correctement vos objets.

Questions connexes