Torna indietro   Hardware Upgrade Forum > Software > Programmazione

BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max mette un pannello IPS da 13 pollici con risoluzione 2,5K e refresh a 120 Hz davanti a una batteria da 10.100 mAh e a quattro altoparlanti. Il listino parte da 399,90 euro, per un progetto molto chiaro e ambizioso: schermo ampio, buon audio e giornate lontano dalla presa, a un prezzo che non pesa sul portafoglio
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-12-2008, 14:29   #1
blindwrite
Senior Member
 
Iscritto dal: Jan 2005
Città: Gières
Messaggi: 3617
[java] array

vorrei creare un array di persone che hanno come attributi nome cognome e età:
ho creato queste tre classi:
Codice:
public class Main {

	
	public static void main(String[] args) {
		Persone   people ;
		people = new Persone(2);
		people.addPeople("Andrea" , "Cognome", "21", 0);
		people.addPeople("Cris", "Cognome", "24", 1);
		System.out.println(people.print(0));
	}

}
Codice:
public class Persone {
 Attributi x;

  		private Persone [] people;
  		
 	public Persone(int a){
 		 people = new Persone[a];
 		
 	}
  	public void addPeople (String a , String b , String c , int y){
  		people[y].x = new Attributi(a,b,c);
  		
  	}
	public String print(int i) {
		return people[i].x.nome + people[i].x.cognome + people[i].x.eta;
		
		
	}
}
Codice:
public class Attributi {
String nome;
String cognome;
String eta;

public  Attributi(String a, String b, String c) {
	
	this.nome=a;
	this.cognome=b;
	this.eta=c;
}
}
Ho un errore di NullPointerException nella riga di codice che ho grassettato.
Questo è il mio primo programma in java (eccetto Hello World) e forse mi mancano alcuni concetti basilari...
Qualcuno può dare uno sguardo e dirmi cosa sbaglio (se è un errore di concetto o altro).

Grazie
__________________
Intel i5 4570 - Gigabyte Z87-HD3 - Antec KÜHLER 620 V4 - Corsair/Kingston 16GB DDR3 1600Mhz - KFA2 GTX 1070 EX @ EXOC bios - SanDisk Ultra II 480GB - EVGA 650GQ - Sony KDL-24EX320 - Logitech G502 & G933 - SteelSeries APEX M500 - W10 64bit
blindwrite è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 14:53   #2
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Sostanzialmente penso sia un errore di concetto, riguardo al paradigma della programmazione ad oggetti.
Ragioniamo così: abbiamo bisogno di un insieme omogeneo (array) di Persona (oggetti della classe Persona) di cui ci serve tenere memoria del nome, cognome ed età.

Quindi già si sono manifestate 2 possibili classi:

Persona:
Codice:
public class Persona {
   private String nome;
   private String cognome;
   private int eta;

   public Persona(String a, String b, int c) {
      nome = a;
      cognome = b;
      eta = c;
   }
}
e (chessò io....diciamo) Persone:
Codice:
public class Persone {
   private Persona[] people;

   public Persone(int a) {
      people = new Persone[c];
   }

   public void addPeople(String a , String b , int c , int y}
      Persona p = new Persona(a, b, c);
      people[y] = p;
   }

   /**
    * qui ci metti tutti gli altri metodi necessari
    */
}
Infine avrai bisogno di una classe cliente (nb: una classe ulteriore, ti conviene, perchè così non mischi con l'implementazione) che avrà il main e da cui farai partire il tutto.
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 17:49   #3
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da blindwrite Guarda i messaggi
ùvorrei creare un array di persone che hanno come attributi nome cognome e età:
ho creato queste tre classi:
...cut...
Ciao, stai solo facendo un esercizio in cui usi gli array perchè vuoi imparare a conoscerne l'utilizzo in Java?
Se non sei costretto per qualche motivo particolare ad usare gli array, la cosa migliore sarebbe sostituire il tuo array di oggetti Persona con un ArrayList di oggetti Persona, in questo modo non dovresti neanche preoccuparti di gestire la dimensione della tua collezione perchè lo fa ArrayList dinamicamente.
(ArrayList è una delle struttre dati disponibili nel Collection Framework di Java, lo trovi, insieme ai suoi amici, in nel package java.util).
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 18:09   #4
blindwrite
Senior Member
 
Iscritto dal: Jan 2005
Città: Gières
Messaggi: 3617
Quote:
Originariamente inviato da Oceans11 Guarda i messaggi
Sostanzialmente penso sia un errore di concetto, riguardo al paradigma della programmazione ad oggetti.
Ragioniamo così: abbiamo bisogno di un insieme omogeneo (array) di Persona (oggetti della classe Persona) di cui ci serve tenere memoria del nome, cognome ed età.

Quindi già si sono manifestate 2 possibili classi:

Persona:
Codice:
public class Persona {
   private String nome;
   private String cognome;
   private int eta;

   public Persona(String a, String b, int c) {
      nome = a;
      cognome = b;
      eta = c;
   }
}
e (chessò io....diciamo) Persone:
Codice:
public class Persone {
   private Persona[] people;

   public Persone(int a) {
      people = new Persone[c];
   }

   public void addPeople(String a , String b , int c , int y}
      Persona p = new Persona(a, b, c);
      people[y] = p;
   }

   /**
    * qui ci metti tutti gli altri metodi necessari
    */
}
Infine avrai bisogno di una classe cliente (nb: una classe ulteriore, ti conviene, perchè così non mischi con l'implementazione) che avrà il main e da cui farai partire il tutto.
Io avevo visto il problema in questo modo:
creo un main da cui avviare tutto, in questo main creo un array di persone di dimensione stabilite (non mi serve che si possa estendere ).
Per fare ciò ho bisogno di una classe ulteriore (Persone) che deve essere fisicamente il mio array. Persone infine deve contenere degli attributi (stringhe), quindi ho creato un altra classe per gestire questi attributi.

Ora non sono sicuro che questo tipo di struttura (annidata) sia implementabile, ma sicuramente adesso cercherò di capire meglio quello che mi suggerivi di fare.

x Xbanryu79
si faccio esercizi per capire come funzionano, poi devo implementarli in un programma di gestione. Sono costretto ad usare gli array quindi nessun'altra alternativa
__________________
Intel i5 4570 - Gigabyte Z87-HD3 - Antec KÜHLER 620 V4 - Corsair/Kingston 16GB DDR3 1600Mhz - KFA2 GTX 1070 EX @ EXOC bios - SanDisk Ultra II 480GB - EVGA 650GQ - Sony KDL-24EX320 - Logitech G502 & G933 - SteelSeries APEX M500 - W10 64bit
blindwrite è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 23:28   #5
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Sì ma devi stare attento: un array di Persone è un array di Persona in realtà

Già sembra astruso il ragionamento, ma tu la devi vedere così:
ogni elemento dell'array è uno (ed uno solo) oggetto di tipo Persona.
Altrimenti cadi in errore.
L'errore che ti lancia NullPointer è dovuto al fatto che stai tentando di accedere al campo di un oggetto non inizializzato. Quindi dirai tu: "benissimo, inizializziamolo". Già, ma che tipo di oggetto è quello? Persone?!?!
Ogni elemento di Persone (ricordiamolo, un array) è a sua volta un altro array???
Così non si finisce più....
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2008, 00:33   #6
blindwrite
Senior Member
 
Iscritto dal: Jan 2005
Città: Gières
Messaggi: 3617
credo di aver afferrato, comunque questo pezzo di codice non può essere corretto
Codice:
 public class Persone {
   private Persona[] people;

   public Persone(int a) {
      people = new Persone[c];
   }

cut...
Quello in grassetto deve essere Persona o sbaglio??
__________________
Intel i5 4570 - Gigabyte Z87-HD3 - Antec KÜHLER 620 V4 - Corsair/Kingston 16GB DDR3 1600Mhz - KFA2 GTX 1070 EX @ EXOC bios - SanDisk Ultra II 480GB - EVGA 650GQ - Sony KDL-24EX320 - Logitech G502 & G933 - SteelSeries APEX M500 - W10 64bit
blindwrite è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2008, 09:13   #7
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Sì perchè:

1) la variabile "people" l'hai dichiarata come array di tipo Persona
2) per i motivi che ti spiegavo.
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2008, 19:44   #8
blindwrite
Senior Member
 
Iscritto dal: Jan 2005
Città: Gières
Messaggi: 3617
Alla fine ho resettato tutte le idee e ho fatto così
Codice:
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Persona [] famiglia = new Persona[4]; //creo uno spazio di puntatori a persona
		famiglia[0]= new Persona("Andrea","cognome","21"); //inizzializzo persona 0
		famiglia[1]= new Persona("Cristiano","cognome","24");
		famiglia[2]= new Persona("Aldo","cognome","unknown");
		famiglia[3]= new Persona("Tea","cognome","più di 40");
		int i;
		for(i=0;i<4;i++){
		famiglia[i].print(famiglia[i], i);
		}
	}

}
Codice:
public class Persona {
String nome;
String cognome;
String eta;	
	
	
public Persona(String string, String string2, String string3) {
		nome=string;
		cognome=string2;
		eta=string3;
	}


public void print(Persona persona, int i) {
	// TODO Auto-generated method stub
	String tmp;
	tmp=persona.nome+" " +persona.cognome+" " + persona.eta;
	System.out.println(tmp);
	}
}
Che in effetti fa in maniera molto più semplice quello che volevo fare.
__________________
Intel i5 4570 - Gigabyte Z87-HD3 - Antec KÜHLER 620 V4 - Corsair/Kingston 16GB DDR3 1600Mhz - KFA2 GTX 1070 EX @ EXOC bios - SanDisk Ultra II 480GB - EVGA 650GQ - Sony KDL-24EX320 - Logitech G502 & G933 - SteelSeries APEX M500 - W10 64bit

Ultima modifica di blindwrite : 10-12-2008 alle 20:07.
blindwrite è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2008, 20:11   #9
blindwrite
Senior Member
 
Iscritto dal: Jan 2005
Città: Gières
Messaggi: 3617
Adesso ho provato ad impaccare più un array in un altro (quella che era la mia idea iniziale) e ci sono riuscito con questo codice
Codice:
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Persona [] famiglia = new Persona[4]; //creo uno spazio di puntatori a persona
		famiglia[0]= new Persona("Andrea","cognome","21",0); //inizzializzo persona 0
		famiglia[1]= new Persona("Cristiano","cognome","24",1);
		famiglia[2]= new Persona("Aldo","cognome","unknown",2);
		famiglia[3]= new Persona("Tea","cognome","più di 40",3);
		
		
		System.out.println(famiglia[3].x[1].contenuto);
	}

}
Codice:
public class Persona {
 Attributi x[];
	
	
public Persona(String a, String b, String c, int i) {
		x = new Attributi[3];
		int k;
		for(k=0;k<3;k++){
			x[k]= new Attributi(a,b,c,k);
		}
	}


}
Codice:
public class Attributi {
String contenuto;
	public Attributi(String a, String b,String c, int i) {
	if(i==0){
		contenuto=a;
		
	}
	if(i==1){
		contenuto=b;
	}
	if(i==2){
		contenuto=c;
	}
	}

}
Alla fine fa la stessa cosa del codice di prima, ma è risolto in modo molto più complesso (dato che il problema da risolvere è banale)...
Comunque questo tipo di struttura è quello che mi serve per risolvere il problema vero della gestione della libreria
__________________
Intel i5 4570 - Gigabyte Z87-HD3 - Antec KÜHLER 620 V4 - Corsair/Kingston 16GB DDR3 1600Mhz - KFA2 GTX 1070 EX @ EXOC bios - SanDisk Ultra II 480GB - EVGA 650GQ - Sony KDL-24EX320 - Logitech G502 & G933 - SteelSeries APEX M500 - W10 64bit
blindwrite è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
Blender 5.3 importa le scene Gaussian Sp...
La NASA pensa ancora ai campioni di Mars...
Nintendo intervisterà i suoi veterani pe...
Altro che GTA 6, finalmente potete gioca...
Il trucco delle app che ti tengono incol...
Elon Musk anticipa le caratteristiche de...
Caos Grok Build: le app create con l'IA ...
ChatGPT abbandona le vecchie modalità vo...
Claude adatta un modello alle GPU AMD in...
Stangata alla pirateria da Nintendo: col...
Cisco potenzia AI Defense: arriva l'inte...
Basta cambiare pasta termica: la nuova i...
Aura Ink 10: la cornice E-Ink si rifà il...
Auto cinesi bandite dalle caserme tedesc...
Addio criogenia: il prototipo di compute...
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: 14:32.


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