Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    The nested type figure cannot hide an enclosing type

    Salve, svolgendo un esercizio sulle classi mi da questo errore in una di quelle derivate ...... a cosa è dovuto ? Se mi dite che posso postare tutto il codice, lo posto ....
    EDIT : risolto , avevo definito due volte la stessa classe :/ però mi restituisce un errore su una variabile
    Ultima modifica di Birkhoff92; 19-11-2018 a 19:04

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Posta il codice, così capiamo.
    L'errore dell'oggetto, come hai già avuto modo di vedere, è dovuto al fatto che hai dichiarato una classe "figure" dentro ad una classe con lo stesso nome.

    PS: I nomi delle classi andrebbero con la lettera maiuscola.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Posta il codice, così capiamo.
    L'errore dell'oggetto, come hai già avuto modo di vedere, è dovuto al fatto che hai dichiarato una classe "figure" dentro ad una classe con lo stesso nome.

    PS: I nomi delle classi andrebbero con la lettera maiuscola.


    Ciao.
    sisi quello dei nomi delle classi lo so ora posto il codice :

    FIGURE
    codice:
    package figureGeometriche;
    
    
    
    
    
    import figureGeometriche.Cerchio;
    import figureGeometriche.Quadrato;
    import figureGeometriche.Rettangolo;
    import figureGeometriche.Figura;
    
    
    
    
    publicclassFigure {
        
        
    
    
            publicstaticdoublesommaPerimetri(Figura[] f) {
                doubles=0;
                for (int i=0; i<f.length; i++) 
                    s += f[i].perimetro();
                returns;    
            }
            
            publicstaticFigurafigMaxArea(Figura[] f) {
                doublem=0; Figurafm=null;
                for (int i=0; i<f.length; i++) 
                    if (f[i].area()>m) {
                       m = f[i].area(); fm = f[i];
                    }
                returnfm;
            }
            
            publicstaticvoidstampaFigurePrimoQuadrante(Figura[] f) {
                for (int i=0; i<f.length; i++) 
                    if ((f[i].getX()>=0)&&(f[i].getY()>=0))
                       System.out.println(f[i]);
            }
    
    
            publicstaticvoidstampaRettangoli(Figura[] f) {
                doublem=0; Figurafm=null;
                for (int i=0; i<f.length; i++) 
                    if (Rettangolo.class.isInstance(f[i]))
                       System.out.println(f[i]);
            }
    
    
    
    
            publicstaticvoidstampaRettangoliMaNonQuadrati(Figura[] f) {
                doublem=0; Figurafm=null;
                for (int i=0; i<f.length; i++) 
                 if (Rettangolo.class.equals(f[i].getClass())) 
                 // oppure if (f[i].getClass().getName().equals("Rettangolo"))
                       System.out.println(f[i]);
            }
    
    
    
    
    }
    FIGURA
    codice:
    package figureGeometriche;
    import figureGeometriche.Figure;
    import figureGeometriche.Cerchio;
    import figureGeometriche.Quadrato;
    import figureGeometriche.Rettangolo;
    
    
    
    
    
    
    abstractclassFigura {
        
        public Figura() {};
        protecteddoublex,y;
        publicFigura(doublex, doubley)
        {
            this.x=x;
            this.y=y;
        }
        publicdoublegetX() {
            returnx;
        }
        
        publicdoublegetY() {
            returny;
        }
        abstractpublicdoubleperimetro();
        abstractpublicdoublearea();
    }
    Ultima modifica di LeleFT; 20-11-2018 a 10:06 Motivo: Tolte formattazioni dal codice

  4. #4
    CERCHIO

    codice:
    package figureGeometriche;import figureGeometriche.Figura;
    
    
    publicclassCerchioextendsFigura {
    
    
        privatedoubler;
        publicCerchio ( doublex, doubley, doubler) {
            super(x,y);
            this.r=r;
        }
        publicdoubleperimetro() {
            return 2*Math.PI*r;
        }
        publicdoublearea() {
            return Math.PI*r*r;
        }
        
        publicStringtoString() {
            return"Cerchio in ( "+x+" , " +y+" ) di raggio  " +r;
        }
        
        
    }
    RETTANGOLO
    codice:
    package figureGeometriche;
    
    import figureGeometriche.Figura;
    
    
    
    
        classRettangoloextendsFigura {
            protecteddoubleb,h;
            publicRettangolo() {};
            publicRettangolo( doublex, doubley , doubleb, doubleh) {
                super(x,y);
                this.b = b;
                this.h = h;
            }
            publicdoubleperimetro() {
                return (b+h*2);
            }
            
            publicdoublearea() {
                returnb*h;
            }
            publicStringtoString() {
                return"Rettangolo in ( " +x+ ", "+y+") di dimensione " + b + " x "+ h; 
            }
            
        }
    QUADRATO
    codice:
    package figureGeometriche;import figureGeometriche.Figure;
    
    
    import figureGeometriche.Cerchio;
    import figureGeometriche.Rettangolo;
    import figureGeometriche.Figura;
    
    
    
    
    publicclassQuadratoextendsRettangolo  {
        
        publicQuadrato(doublex, doubley,double1) {
            super(x,y);
            
        }
        publicStringtoString() {
            return"Quadrato in ( "+x+" , "+y+" ) di dimensione  "+ b+ "x "+h;
        }
    
    
        
        
    }
    Ultima modifica di LeleFT; 20-11-2018 a 10:05

  5. #5
    controller
    codice:
    package figureGeometriche;
    
    import figureGeometriche.Figure;
    
    
    import figureGeometriche.Cerchio;
    import figureGeometriche.Quadrato;
    import figureGeometriche.Rettangolo;
    import figureGeometriche.Figura;
    
    
    publicclassController {
    
    
        publicstaticvoidmain(String[] args) {
            
            
            Figura[] f = newFigura[5];
            f[0] = new Rettangolo(1,1,12,5);
            f[1] = new Quadrato (2,2,4);
            f[2] = new Cerchio(0,1,5);
            f[3] = new Rettangolo(-2,1,10,5);
            f[4] = new Cerchio(-1,-1,4);
            
            double p = sommaPerimetri(f);
            System.out.println("Somma dei perimetri = "+p);
            
            Figura fm = figMaxArea(f);
            System.out.println("Figura con area massima = "+fm+", area = "+fm.area());
            System.out.println();
            
            System.out.println("Figure nel primo quadrante:");
            stampaFigurePrimoQuadrante(f);
            System.out.println();
    
    
            System.out.println("Lista rettangoli:");
            stampaRettangoli(f);
            System.out.println();
    
    
            System.out.println("Lista rettangoli non quadrati:");
            stampaRettangoliMaNonQuadrati(f);
            System.out.println();
        }
        
    
    
        }
    Nella classe quadrato mi dice di eliminare i tokens ( double 1 e in super x,y,1,1) mentre nel controller non mi riconosce i metodi
    Ultima modifica di LeleFT; 20-11-2018 a 10:05

  6. #6
    rettangolo
    codice:
    package figureGeometriche;
    
    import figureGeometriche.Figura;
    
    
    
    
        classRettangoloextendsFigura {
            protecteddoubleb,h;
            publicRettangolo() {};
            publicRettangolo( doublex, doubley , doubleb, doubleh) {
                super(x,y);
                this.b = b;
                this.h = h;
            }
            publicdoubleperimetro() {
                return (b+h*2);
            }
            
            publicdoublearea() {
                returnb*h;
            }
            publicStringtoString() {
                return"Rettangolo in ( " +x+ ", "+y+") di dimensione " + b + " x "+ h; 
            }
            
        }
    quadrato
    codice:
    package figureGeometriche;import figureGeometriche.Figure;
    
    
    import figureGeometriche.Cerchio;
    import figureGeometriche.Rettangolo;
    import figureGeometriche.Figura;
    
    
    
    
    publicclassQuadratoextendsRettangolo  {
        
        publicQuadrato(doublex, doubley,double1) {
            super(x,y);
            
        }
        publicStringtoString() {
            return"Quadrato in ( "+x+" , "+y+" ) di dimensione  "+ b+ "x "+h;
        }
    
    
        
        
    }
    Ultima modifica di LeleFT; 20-11-2018 a 10:06

  7. #7
    cerchio
    codice:
    package figureGeometriche;import figureGeometriche.Figura;
    
    
    publicclassCerchioextendsFigura {
    
    
        privatedoubler;
        publicCerchio ( doublex, doubley, doubler) {
            super(x,y);
            this.r=r;
        }
        publicdoubleperimetro() {
            return 2*Math.PI*r;
        }
        publicdoublearea() {
            return Math.PI*r*r;
        }
        
        publicStringtoString() {
            return"Cerchio in ( "+x+" , " +y+" ) di raggio  " +r;
        }
        
        
    }
    Ultima modifica di LeleFT; 20-11-2018 a 10:06

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Primo errore che ho visto: la classe Quadrato estende Rettangolo, ma nel costruttore di Quadrato richiami super(x, y); Peccato che la classe Rettangolo non abbia un costruttore che riceve solo 2 argomenti... Ne ha uno che non riceve argomenti e uno che ne riceve 4. Tu sei obbligato a richiamare uno di questi due.

    Se hai una classe Y che estende la classe X allora il costruttore della classe Y dovrà obbligatoriamente richiamare uno dei costruttori della classe X. Se non lo fai tu esplicitamente con una chiamata a super(...), il compilatore tenterà di aggiungere automaticamente una chiamata al costruttore di default ( super(); senza argomenti ). Se la superclasse X ha un costruttore di default, bene, altrimenti avrai un errore in compilazione.

    Alla luce di questo, sistema la chiamata a super() della classe Quadrato perchè così com'è non compila proprio.

    PS: prima di incollare il codice preso direttamente dal tuo editor, assicurati di aver rimosso tutte le formattazioni di colore: incolla il codice all'interno del blocco note di Windows (o di un qualsiasi editor NEUTRO), poi ricopialo e incollalo nel forum. Come vedi, intervenire dopo è un disastro.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Primo errore che ho visto: la classe Quadrato estende Rettangolo, ma nel costruttore di Quadrato richiami super(x, y); Peccato che la classe Rettangolo non abbia un costruttore che riceve solo 2 argomenti... Ne ha uno che non riceve argomenti e uno che ne riceve 4. Tu sei obbligato a richiamare uno di questi due.

    Se hai una classe Y che estende la classe X allora il costruttore della classe Y dovrà obbligatoriamente richiamare uno dei costruttori della classe X. Se non lo fai tu esplicitamente con una chiamata a super(...), il compilatore tenterà di aggiungere automaticamente una chiamata al costruttore di default ( super(); senza argomenti ). Se la superclasse X ha un costruttore di default, bene, altrimenti avrai un errore in compilazione.

    Alla luce di questo, sistema la chiamata a super() della classe Quadrato perchè così com'è non compila proprio.

    PS: prima di incollare il codice preso direttamente dal tuo editor, assicurati di aver rimosso tutte le formattazioni di colore: incolla il codice all'interno del blocco note di Windows (o di un qualsiasi editor NEUTRO), poi ricopialo e incollalo nel forum. Come vedi, intervenire dopo è un disastro.


    Ciao.
    grazie per le delucidazioni se posso , senza aprire ulteriore 3d, vorrei sapere come mai se faccio una cosa del genere con tipi wrappati , mi restituisce falso .... :/ Credo sia dovuto al fatto che i wrapper sono immutabili e venga, probabilmente, considerato solo il primo byte dell'intero , quindi -127 e 127 ma non ne sono sicuro . Grazie
    Integer x = new Integer (1000);
    Integer y = new Integer (1000);
    x == y; // false!

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Il motivo è semplice: l'operatore di confronto == lavora sul valore del reference, non sull'oggetto puntato dal reference. Di conseguenza x e y sono due oggetti distinti, ciascuno con un proprio indirizzo in memoria... il confronto fatto con == guarda gli indirizzi di memoria. Se vuoi confrontare due oggetti devi usare il metodo equals() (forse l'hai già visto per le stringhe, che sono anch'esse oggetti).

    codice:
    Integer x = new Integer( 1000 );
    Integer y = new Integer( 1000 );
    
    boolean confronto1 = (x == y);        // falso: due indirizzi diversi
    boolean confronto2 = x.equals( y );   // vero: si guarda il contenuto
    
    x = y;
    boolean confronto3 = (x == y);        // vero: entrambi puntano allo stesso oggetto

    Ciao.
    Ultima modifica di LeleFT; 20-11-2018 a 11:52
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.