Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le novità MSI del 2026 per i videogiocatori
Le novità MSI del 2026 per i videogiocatori
Con le nuove soluzioni della serie MEG, acronimo di MSI Enthusiast Gaming, l'azienda taiwanese vuole proporre per il 2026 una gamma di proposte desktop che si rivolgono direttamente all'utente più appassionato con schede madri, chassis e sistemi di raffreddamento. Non da ultimi troviamo anche gli alimentatori, che abbinano potenza a ricerca della massima sicurezza di funzionamento.
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers
MSI continua ad investire nel proporre schermi pensati per rispondere alle esigenze dei videogiocatori, utilizzando la quinta generazione di tecnologia QD-OLED sviluppata da Samsung. Il modello MPG 341CQR QD-OLED X36 è lpultima novità al debutto in concomitanza con il CES 2026, uno schermo curvo di ampia risoluzione pensato per i videogiocatori più esigenti
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-02-2010, 15:34   #1
skyblu_angel
Member
 
L'Avatar di skyblu_angel
 
Iscritto dal: Aug 2006
Messaggi: 244
[JAVA] Gestione degli array

Sto studiando gli array in java e sto provando a scrivere parecchio codice sulle possibili operazioni da fare su di essi.

Al momento sono in difficoltà su un paio di operazioni:
1 - svuotare l'array
2 - modificare la capacità dell'array(non mi interessa mantenere il suo contenuto)

Mi spiego meglio:
1- ho bisogno di svuotare l'array da tutto il suo contenuto. So che mi basta fare un ciclo dove setto tutti i campi dell'array su null o comunque un valore standard.

2 - ho bisogno di cambiare la capacità dell'array ma se faccio così:
Quote:
array = new String[nuova_dimensione]
Non accade nulla. Nè svuota l'array, nè cambia il contenuto, nè modifica le sue dimensioni.

In conclusione: il problema più grosso è il passo numero 2.

Accetto consigli...
skyblu_angel è offline   Rispondi citando il messaggio o parte di esso
Old 19-02-2010, 16:01   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
In verità non puoi cambiare la capacità di un array.

Puoi fare quello che giustamente fai nel punto due, cioè creare un nuovo array e assegnarlo ad una variabile già esistente.

Deve funzionare per forza. Cioè se dici:

String[] array = new String[10];
System.out.println("array size: " + array.length);
array = new String[20];
System.out.println("array size: " + array.length);

saltano fuori 10 e 20 senza possibilità di scampo.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 19-02-2010, 16:01   #3
vladix
Member
 
L'Avatar di vladix
 
Iscritto dal: Jan 2008
Città: roma
Messaggi: 296
non serve fare un ciclo per svuotare l'array ma basta reistanziarlo ... per il punto 2 quello che scrivi e una cosa assurda , ti mostro qui un pezzo di codice funzionante ... ( che fa la stessa cosa che hai descritto )

Codice:
		String [] xd = new String [3];
		
		xd[0] = "a";
		xd[1] = "b";
		xd[2] = "c";
		
		for(String d : xd){
			
			System.out.println(d);
		}
		
                // svuoto l'array e reimposto la capacità ... 
		xd = new String [4];
		
		for(String d : xd){
			
			System.out.println(d);
		}
vladix è offline   Rispondi citando il messaggio o parte di esso
Old 19-02-2010, 16:10   #4
skyblu_angel
Member
 
L'Avatar di skyblu_angel
 
Iscritto dal: Aug 2006
Messaggi: 244
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
In verità non puoi cambiare la capacità di un array.

Puoi fare quello che giustamente fai nel punto due, cioè creare un nuovo array e assegnarlo ad una variabile già esistente.

Deve funzionare per forza. Cioè se dici:

String[] array = new String[10];
System.out.println("array size: " + array.length);
array = new String[20];
System.out.println("array size: " + array.length);

saltano fuori 10 e 20 senza possibilità di scampo.
Ti posto il mio codice:

Quote:
// rigenera array con nuova capacità massima
System.out.print("Inserisci la nuova capacità massima dell'array : ");
appoggio=tastiera.readLine();
dimensione_max=Integer.parseInt(appoggio);
TipoArray.rigenera(giochino, dimensione_max );
Quote:
public void rigenera(String[] arrayx, int nuovaDimensione){

for (int c=0;c<arrayx.length;c++){ //svuotamento array
arrayx[c]=null;
}
arrayx = new String[nuovaDimensione];
System.out.println("Operazione avvenuta con successo.\nLa nuova massima capacità è di : "+arrayx.length+"\n");
}
Come puoi vedere, nel metodo rigenera effettuo l'operazione che mi dicevi prima te:
arrayx = new String[nuovaDimensione];
Ma non accade nulla!
Come se non facessi niente... L'array rimane invariato
skyblu_angel è offline   Rispondi citando il messaggio o parte di esso
Old 19-02-2010, 16:13   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Punto 1: ti sei gia' risposto da solo.
Tenendo presente che in Java puoi avere array di tipi primitivi o array di riferimenti, in entrambi i casi e' comunque sufficiente valorizzare i singoli elementi assegnando loro il valore di default previsto per quel tipo, proprio come hai detto.

Punto 2: dunque, cambiare la capacità dell'array significa o aumentare o diminuire il numero di elementi che esso può contenere.
Bisogna tenere presente che gli array non sono "dinamici": una volta creato, un array non cambia dimensione. Bisogna creare un nuovo oggetto array specificando per esso la nuova dimensione desiderata, quindi copiare gli elementi dell'array originale in quello nuovo.
Considerando il fatto di voler copiare gli elementi del vecchio array sul nuovo, in caso di un aumento di dimensioni, non ci sono particolari problemi.
In caso di diminuzione invece si presenta il caso in cui il nuovo array sia di dimensione insufficiente a contenere tutti gli elementi presenti in quello originario.

Detto questo, se nel codice che hai postato 'array' è dichiarato di tipo String[], francamente non vedo problemi: l'array verrà reinizializzato con la dimensione che hai specificato e che tutti gli elementi a null.
__________________

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 19-02-2010, 16:19   #6
skyblu_angel
Member
 
L'Avatar di skyblu_angel
 
Iscritto dal: Aug 2006
Messaggi: 244
Ecco come ho risolto:

Se utilizzo : arrayx = new String[nuova_dimensione];
All'interno di un metodo che vado a richiamare nel main, non accade nulla.
Se invece la scrivo all'interno del main funziona.

Qualcuno può spiegarmi il motivo?
skyblu_angel è offline   Rispondi citando il messaggio o parte di esso
Old 19-02-2010, 16:28   #7
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
l'argomento del metodo è una variabile diversa da quella che usi quando invochi lo stesso metodo. Capita allora che se riassegni "l'argomento" è quest'ultimo che va a puntare ad un diverso valore mentre la variabile usata per l'invocazione (il cd parametro) resta dov'era.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 19-02-2010, 16:33   #8
skyblu_angel
Member
 
L'Avatar di skyblu_angel
 
Iscritto dal: Aug 2006
Messaggi: 244
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
l'argomento del metodo è una variabile diversa da quella che usi quando invochi lo stesso metodo. Capita allora che se riassegni "l'argomento" è quest'ultimo che va a puntare ad un diverso valore mentre la variabile usata per l'invocazione (il cd parametro) resta dov'era.
Dato che ho postato il codice, mi diresti quindi dove è l'errore?
skyblu_angel è offline   Rispondi citando il messaggio o parte di esso
Old 19-02-2010, 16:58   #9
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da skyblu_angel Guarda i messaggi
Dato che ho postato il codice, mi diresti quindi dove è l'errore?
Te l'ha detto proprio nelle frasi che hai quotato.
L'errore è che nello scope del tuo 'metodo' rigenera l'oggetto 'arrayx' è una copia dell'array di String che hai creato nello scope del metodo 'main'.

Quindi quando nel metodo 'rigenera' esegui delle operazioni su 'arrayx', stai solo modificando una variabile locale; quando poi il metodo 'rigenera' termina, la variabile 'arrayx' locale viene distrutta.
E l'array "esterno", quello dichiarato nello scope del metodo 'main', non viene neanche sfiorato.

Risolvi tutto semplicemente gettando ai pesci il meotodo 'rigenera' ed effettuando un normale assegnamento:
Codice:
// nel metodo main
giochino = new String[nuovaDimensione];
__________________

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 19-02-2010, 17:05   #10
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Non è un errore nel senso che il tuo codice è corretto. E non è un problema di array ma di puntatori.

Questo è il tuo metodo rigenera:

Codice:
public void rigenera(String[] array, int nuovaDimensione) {
    array = new String[nuovaDimensione];
}
quando lo invochi:

Codice:
giochino = un certo array di stringhe
dimensione_max = leggi...
rigenera(giochino, dimensione_max);
rigenera si trova per le mani un puntatore allo stesso valore di giochino - solo che in rigenera quando scrivi:

array = new String[nuovaDimensione]

le strade di questi due puntatori si dividono.

Quando scrivi tutto nel main, non c'è nulla da dividere: non ci sono due puntatori, ce n'è uno solo:

Codice:
giochino = un certo array di stringhe
dimensione_max = leggi...
giochino = new String[dimensione_max];
E' la stessa cosa che capita se diciamo:

Codice:
public void metodo(int argomento) {
    argomento = 50;
}
Codice:
int valore = 10;
metodo(valore);
System.out.println(valore);
Stampa 10, non 50. Come fai a fargli stampare 50? La via idiomatica - cioè quel che tipicamente scriviamo in Java - passa per la restituzione di un valore da parte del metodo.

Codice:
public int metodo(int argomento) {
    argomento = 50;
    return argomento;
}
Codice:
int valore = 10;
valore = metodo(valore);
System.out.println(valore);
Lo stesso vale nel caso dell'array:

Codice:
public String[] rigenera(String[] array, int nuovaDimensione) {
    return new String[nuovaDimensione];
}
Codice:
int max = leggi un intero...
giochini = rigenera(giochini, max);
Dal che si capisce che rigenera non ha poi un gran bisogno dell'argomento di tipo String[]

Codice:
public String rigenera(int nuovaDimensione) {
    return new String[nuovaDimensione];
}
Codice:
int max = leggi un intero
giochini = rigenera(max);
L'argomento di tipo String[] servirebbe se prima di riassegnare giochini dovessimo fare qualche genere di operazione sui valori originali o se il nuovo array dovesse avere dei valori che dipendono dai vecchi. Tieni conto che non è necessario impostare a null i valori di un array se questo è destinato ad essere scartato dal garbage collector.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 19-02-2010, 17:42   #11
skyblu_angel
Member
 
L'Avatar di skyblu_angel
 
Iscritto dal: Aug 2006
Messaggi: 244
Ok...

ho corretto scrivendo tutto nel main ed ho risolto..
skyblu_angel è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
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...
LG presenta i nuovi Gram Pro con lega Ae...
LG NanoCell 65'' a 499€: il 4K di qualit...
La Befana vien di notte, anche su Amazon...
Realme 12 4G 8GB/128GB a un prezzo folle...
DJI Mini 4 Pro Fly More Combo scende a s...
C'è un monitor Dell 24" Full...
HP Digital Passport, integrazione Copilo...
HP EliteBook X G2 ed EliteBoard G1a uffi...
Tutti possono avere un Alienware: al CES...
La gamma XPS di Dell si rinnova completa...
HyperX OMEN: ufficiali 3 nuovi laptop, 4...
HP presenta al CES 2026 la nuova gamma d...
Nuova Audi A2 e-tron: la compatta elettr...
Anche a Roma arriva la Zona 30: limite d...
Motorola sfida il mercato premium: in ar...
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: 12:20.


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