Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [JAVA] Problema banale

  1. #1
    Utente di HTML.it L'avatar di Ilmalcom
    Registrato dal
    Oct 2002
    Messaggi
    1,345

    [Java] Problema banale

    Qualcuno sa dirmi perchè questo semplice frammento di codice:

    codice:
    import java.util.*;
    
    class IntSet {
            private Vector elems = new Vector ();
    
            public IntSet () {
                    elems = new Vector ();
            }
    
            public void insert (int x) {
                    if (!elems.contains (x))
                            elems.add (x);
            }
    
            public void remove (int x) {
                    elems.remove (x);
            }
    
            public boolean isIn (int x) {
                    return (elems.contains (x));
            }
    
            public int size () {
                    return (elems.size ());
            }
    }
    Genera i seguenti errori?
    IntSet.java:11: cannot resolve symbol
    symbol : method contains (int)
    location: class java.util.Vector
    if (!elems.contains (x))
    ^
    IntSet.java:12: cannot resolve symbol
    symbol : method add (int)
    location: class java.util.Vector
    elems.add (x);
    ^
    IntSet.java:20: cannot resolve symbol
    symbol : method contains (int)
    location: class java.util.Vector
    return (elems.contains (x));
    ^
    3 errors

  2. #2
    ciao,
    se nn sbaglio il problema sta nel fatto che il parametro x che passi è di tipo int che nn è un oggetto...

    mentre i metodi di vector accettano solo classi derivate da object.

    puoi provare con Integer.

  3. #3
    Utente di HTML.it L'avatar di Ilmalcom
    Registrato dal
    Oct 2002
    Messaggi
    1,345
    Ho provato a cambiare approccio e l'ho fatto così, dovrebbe andare no?

    codice:
    import java.util.*;
    
    class IntSet {
            private final int size = 100;
            private int data [] = new int [size];
            private int top = -1;
    
            public boolean isEmpty () {
                    return (top < 0);
            }
    
            public boolean isIn (int x) {
                    boolean found = false;
                    for (int i = 0; i <= top && !found; i++)
                            if (data[i] == x)
                                    found = true;
                    return found;
            }
    
            public void insert (int x) {
                    if (top < data.length - 1 && !this.isIn (x))
                            data [++top] = x;
            }
    
            public void remove (int x) {
                    int i = 0;
                    while (i <= top && data[i] != x)
                            i++;
                    if (data[i] == x) {
                            while (i != top) {
                                    data[i] = data[i+1];
                                    i++;
                            }
                            top--;
                    }
            }
    
            public int size () {
                    return (top + 1);
            }
    
            public void print_set () {
                    for (int i = 0; i <= top; i++)
                            System.out.println (data[i]);
            }
    }

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    se sei in Java 5 c'è l'autoboxing, quindi un int verrà automaticamente trasformato in Integer(e viceversa, ma in quel caso è antounboxing).
    Cmq, sempre se sei in Java 5 ti conviene specificare i generics

    codice:
    private Vector<Integer> elems = new Vector<Integer>();
    se non sei in Java 5 deve esplicitatamente inserire un Integer usando manualmente la classe wapper; quindi

    codice:
    ...
    Integer i = new Integer(5);
    int ii = i.intValue();
    ...

    sel tuo secondo codice usi gli array, molto più scomodi dei Vector, ti conviene correggere quello sopra.
    Inserendo appunto(per esempio in contains):

    codice:
    ...
    if(!elms.contains(new Integer(x))) ;
    ...
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    Utente di HTML.it L'avatar di Ilmalcom
    Registrato dal
    Oct 2002
    Messaggi
    1,345
    Scusami, ma per il momento non abbiamo visto praticamente nulla di Java e stiamo utilizzando ancora la versione 1.4

    Ti spiace dirmi se la mia implementazione, per quanto scomoda, è corretta? Ho utilizzato solo gli strumenti a mia disposizione

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    visto che prima avevi usato Vector, ti ho cinsigliato di continuare a usare quella, se usi la 1.4 l'errore, come già segnalatoti, sta nel fatto che i metodi di Vector si aspettano un Object(o una classe derivata, un qualsiasi oggetto quindi), Java offre allo sviluppatore una classe wapper(una sorta di "contenitore") che ti permette di passare int sotto forma di oggetto, la classe Integer appunto.
    Se la classe Integer ancora non la puoi usare e hai deciso di usare gli array a prima vista mi sembra giust il tuo codice, ho provato anche a compilare e mi compila; l'unica cosa che ti consiglio è di mettere le {} anche per costrutti di solo un comando, IMHO rende più chiaro il sorgente e se sei abituato a mettere le graffe è più difficile dimenticarsele quando veramente servono ;-)

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.