Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Cos'è la bolla dell'IA e perché se ne parla
Cos'è la bolla dell'IA e perché se ne parla
Si parla molto ultimamente di "bolla dell'intelligenza artificiale", ma non è sempre chiaro perché: l'IA è una tecnologia molto promettente e che ha già cambiato molte cose dentro e fuori le aziende, ma ci sono enormi aspettative che stanno gonfiando a dismisura i valori delle azioni e distorcendo il mercato. Il che, com'è facile intuire, può portare a una ripetizione della "bolla dotcom", e forse anche di quella dei mutui subprime. Vediamo perché
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-08-2020, 16:13   #1
pepp1995
Junior Member
 
Iscritto dal: Aug 2017
Messaggi: 4
[Java] codice non compila

Obiettivo: avere un array di un certo Tipo ClassePadre MA "riempito" con oggetti di ClassiFiglie diverse.

Ho creato una ClassePadre: Figura in cui non faccio sostanzialmente nulla ed ho definito le varie ClassiDerivate di questa classe .
Ogni ClasseDerivata ha 1 unico metodo che è una stampa.


/*DEFINISCO la CLASSE MADRE*/
public class Figura{


}


/*DEFINISCO le CLASSI FIGLIE*/
class Triangolo extends Figura{

public void disegnaTriangolo()
{
System.out.println("disegno Triangolo");
}

}


class Cerchio extends Figura{

public void disegnaCerchio()
{
System.out.println("disegno cerchio");
}

}

class Quadrato extends Figura{

public void disegnaQuadrato()
{
System.out.println("disegno quadrato");
}

}


Il vettore voglio sia inizializzato, inizializzando " in modo random" i suoi elementi con oggetti delle tre classi figlie .

import java.util.Random; //importo la Classe Random

public class GeneratoreCasualeFigure{

//metodo
public Figura GeneraFigura()
{

Random rand=new Random();
Figura x=null;
switch(rand.nextInt(3))
{
case 0:
x= new Cerchio();
break;
case 1:
x= new Quadrato();
break;
case 2:
x= new Triangolo();
break;
}

return x;
}

}


Fin qui tutto funziona nella mainClass.
A questo punto , vorrei fare una stampa del vettore che "a seconda dell'oggetto\elemento del vettore da stampare, mi chiama il metodo() di stampa di quell'oggetto"
Quindo ho definito una classe: Test

public class Test{

public void stampaVettOggFiglie(Figura[] vet,int n )
{

for(int i=0; i<n; i++)
{
switch(vet[i].getClass().getName() ) //scelgo in base al tipoRefenziato
{
case "Triangolo":
vet[i].disegnaTriangolo();
break;

case "Quadrato":
vet[i].disegnaQuadrato();
break;

case "Cerchio":
vet[i].disegnaCerchio();
break;
}
}
}


public static void main(String[] args)
{
Figura[] A= new Figura[10];

GeneratoreCasualeFigure gen= new GeneratoreCasualeFigure();

for(int i=0; i<10; i++)
A[i] = gen.GeneraFigura();


//STAMPA VETTORE riempito con oggetti di classiFiglie diverse
Test x=new Test();
x.stampaVettOggFiglie(A,3);

}

}


PROBLEMA: ho un errore di compilazione, perché il compilatore cerca i tre metodi: disegnaTriangolo(), disegnaQuadrato() , disegnaCerchio() nella ClassePadre e vede che lì non ci sono.

Tuttavia, mi aspetterei che:
<<visto che "al momento dell'invocazione del metodo: stampaVettOggFiglie() ",gli elementi vet[i] sono stati inizializzati con le reference dei rispettivi oggetti--->
- nel momento in cui faccio : vet[i].disegnaTriangolo(); sto accedendo al metodo: disegnaTriangolo() dell' oggetto vet[i] della classe Triangolo
- nel momento in cui faccio : vet[i].disegnaQuadrato(); sto accedendo al metodo: disegnaQuadrato() dell' oggetto vet[i] della classe Quadrato
- nel momento in cui faccio : vet[i].disegnaCerchio(); sto accedendo al metodo: disegnaCerchio() dell' oggetto vet[i] della classe Cerchio >>
Perché non è così?
pepp1995 è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2020, 12:24   #2
Lampo89
Member
 
L'Avatar di Lampo89
 
Iscritto dal: Dec 2006
Messaggi: 33
Quote:
Originariamente inviato da pepp1995 Guarda i messaggi
Obiettivo: avere un array di un certo Tipo ClassePadre MA "riempito" con oggetti di ClassiFiglie diverse.

Ho creato una ClassePadre: Figura in cui non faccio sostanzialmente nulla ed ho definito le varie ClassiDerivate di questa classe .
Ogni ClasseDerivata ha 1 unico metodo che è una stampa.


/*DEFINISCO la CLASSE MADRE*/
public class Figura{


}


/*DEFINISCO le CLASSI FIGLIE*/
class Triangolo extends Figura{

public void disegnaTriangolo()
{
System.out.println("disegno Triangolo");
}

}


class Cerchio extends Figura{

public void disegnaCerchio()
{
System.out.println("disegno cerchio");
}

}

class Quadrato extends Figura{

public void disegnaQuadrato()
{
System.out.println("disegno quadrato");
}

}


Il vettore voglio sia inizializzato, inizializzando " in modo random" i suoi elementi con oggetti delle tre classi figlie .

import java.util.Random; //importo la Classe Random

public class GeneratoreCasualeFigure{

//metodo
public Figura GeneraFigura()
{

Random rand=new Random();
Figura x=null;
switch(rand.nextInt(3))
{
case 0:
x= new Cerchio();
break;
case 1:
x= new Quadrato();
break;
case 2:
x= new Triangolo();
break;
}

return x;
}

}


Fin qui tutto funziona nella mainClass.
A questo punto , vorrei fare una stampa del vettore che "a seconda dell'oggetto\elemento del vettore da stampare, mi chiama il metodo() di stampa di quell'oggetto"
Quindo ho definito una classe: Test

public class Test{

public void stampaVettOggFiglie(Figura[] vet,int n )
{

for(int i=0; i<n; i++)
{
switch(vet[i].getClass().getName() ) //scelgo in base al tipoRefenziato
{
case "Triangolo":
vet[i].disegnaTriangolo();
break;

case "Quadrato":
vet[i].disegnaQuadrato();
break;

case "Cerchio":
vet[i].disegnaCerchio();
break;
}
}
}


public static void main(String[] args)
{
Figura[] A= new Figura[10];

GeneratoreCasualeFigure gen= new GeneratoreCasualeFigure();

for(int i=0; i<10; i++)
A[i] = gen.GeneraFigura();


//STAMPA VETTORE riempito con oggetti di classiFiglie diverse
Test x=new Test();
x.stampaVettOggFiglie(A,3);

}

}


PROBLEMA: ho un errore di compilazione, perché il compilatore cerca i tre metodi: disegnaTriangolo(), disegnaQuadrato() , disegnaCerchio() nella ClassePadre e vede che lì non ci sono.

Tuttavia, mi aspetterei che:
<<visto che "al momento dell'invocazione del metodo: stampaVettOggFiglie() ",gli elementi vet[i] sono stati inizializzati con le reference dei rispettivi oggetti--->
- nel momento in cui faccio : vet[i].disegnaTriangolo(); sto accedendo al metodo: disegnaTriangolo() dell' oggetto vet[i] della classe Triangolo
- nel momento in cui faccio : vet[i].disegnaQuadrato(); sto accedendo al metodo: disegnaQuadrato() dell' oggetto vet[i] della classe Quadrato
- nel momento in cui faccio : vet[i].disegnaCerchio(); sto accedendo al metodo: disegnaCerchio() dell' oggetto vet[i] della classe Cerchio >>
Perché non è così?
Ciao,
vet[i] è una reference a Figure, di conseguenza potrai invocare i soli metodi che costituiscono l'interfaccia di Figure.
Stai confondendo due concetti: un conto è il tipo concreto dell'oggetto che è referenziato - che può essere uno tra un triangolo, un cerchio e un quadrato - un'altra cosa è il tipo della referenza che punta ad esso e che definisce "ciò che puoi utilizzare".
Nel tuo caso devi eseguire un cast esplicito nella opportuna classe figlia, ad es:

case "Triangolo":
((Triangolo)vet[i]).disegnaTriangolo();
break;

o ancora meglio sfruttare in maniera più efficace interfacce e polimorfismo, per es (mantenendo quasi tutti i vecchi nomi):

/*DEFINISCO la CLASSE MADRE*/
public interface Figura {
void disegna();
}

/*DEFINISCO le CLASSI FIGLIE*/
class Triangolo implements Figura {
@Override
public void disegna() {
System.out.println("disegno Triangolo");
}
}

class Cerchio implements Figura { // TODO
}

class Quadrato implements Figura { // TODO
}

// test
public class Test {
private static final int SIZE = 10;

public static void stampaVettOggFiglie(Figura[] vet) {
for (Figura f : vet) {
f.disegna();
}
}

public static void main(String[] args) {
final Figura[] A = new Figura[SIZE];
final GeneratoreCasualeFigure gen = new GeneratoreCasualeFigure();

for (int i = 0; i < SIZE; i++) {
A[i] = gen.GeneraFigura();
}

//STAMPA VETTORE riempito con oggetti di classiFiglie diverse
stampaVettOggFiglie(A);
}

}

Ultima modifica di Lampo89 : 13-08-2020 alle 12:26.
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
SpaceX: un satellite ha fotografato il s...
36 idee regalo con offerte Amazon sotto ...
Sony assume il controllo dei Peanuts: Sn...
DJI Neo scende a 149€ su Amazon, in vers...
Scoperto un nuovo esopianeta che orbita ...
Blue Origin NS-37: successo per la missi...
Potrebbe essere stata rilevata una super...
La cometa interstellare 3I/ATLAS è...
Xiaomi 17 Ultra: l'autonomia non sarà un...
Il processo produttivo a 2 nm di TSMC è ...
L'atteso aggiornamento dei driver della ...
The Elder Scrolls VI nel 2029 e Fallout ...
Il Ryzen 7 9850X3D appare nel catalogo d...
Weekend pre natalizio Amazon, ecco tutte...
Prezzi giù su Oral-B iO: spazzolini elet...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:54.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v