Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air combina diverse carte molto interessanti: un OLED PaperMatte da 12 pollici, un corpo sottile e una tastiera molto comoda. Durante la prova abbiamo apprezzato fluidità, audio e comfort visivo, mentre i test hanno chiarito pregi e qualche limite nelle prestazioni. L'autonomia ha convinto anche nell'uso intermittente; la scelta passa dalla compatibilità delle proprie app e dal valore del pacchetto con accessori, proposto a 749 euro
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
Debuttano ufficialmente i primi sistemi notebook basati su piattaforma NVIDIA RTX Spark, abbinati a Windows on ARM e pensati per l'intelligenza artificiale agentica. Architettura integrata tra CPU e GPU che condividono la memoria di sistema, capace di gestire in locale modelli molto grandi ma al contempo anche di spiccare con la grafica e l'elaborazione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Abbiamo provato Motorola razr fold, il pieghevole a libro con display interno LTPO da 8,09 pollici, Snapdragon 8 Gen 5 e batteria da 6000 mAh in 243 grammi. Pennino e custodia sopno già nella confezione, per un foldable che si caratterizza per il pannello luminoso, l'autonomia ottima per la categoria e le fotocamere coerenti e ben sfruttabili. Il listino è di 1999 euro, ma in vendita si trova già a molto meno
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-02-2010, 18:18   #1
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
[Java] Generare array con numeri non duplicati!

Salve a tutti!! Ho realizzato questo codice in java e vorrei sapere se c'è un metodo per evitare quel do-while orrendo in quanto si blocca sempre al momento dell'esecuzione! Come posso fare in base a questo codice ad evitare di stampare interi duplicati? Grazie!!!
Codice:
	        int max = 20;
		int[] ris = new int[10];

	        int error=0;
		int temp=0;
		
		
		
		// devo stampare  11 array random di 10 interi! 
		for(int i=0; i<11; i++){
			
			for (int k=0; k<ris.length; k++){
	
		
                      \**Questo dovrebbe eliminare i duplicati ma il programma  è  come se va  in loop e si blocca!
**/

/**                         Blocco in loop                    **/
			do{
				temp = (int) (max*Math.random())+1;
				for(int j=0; j<k; j++){
					
					if(ris[j]==temp){
						
						error=1;
					}	
				}
					
			}while(error==1); //esegue il do finchè error=1 
					
				ris[k]=temp;
				
				
				System.out.print(ris[k]+" ");
				
			
/**                         Blocco in loop                    **/

Spero possiate aiutarmi!! sto diventando matto!! Grazie!!

Ultima modifica di ozzy19 : 09-02-2010 alle 18:21.
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 19:11   #2
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13052
Non puoi usare un HashSet? O devi implementare te l'eliminazione dei duplicati?
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 19:15   #3
Gold
Member
 
L'Avatar di Gold
 
Iscritto dal: Oct 2002
Messaggi: 133
mmh, ma ti sei scordato un pezzo di codice?

La condizione per impostare error = 1 non e' mai vera, perche' dentro ris non hai scritto nulla, quindi alluppa

Saluto
Gold è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 19:55   #4
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
Quote:
Originariamente inviato da Gold Guarda i messaggi
mmh, ma ti sei scordato un pezzo di codice?

La condizione per impostare error = 1 non e' mai vera, perche' dentro ris non hai scritto nulla, quindi alluppa

Saluto
Ma dove dentro questo ris[j]?

Comunque lo posso fare sia in un modo che nell'altro!! come funziona HashSet? non sono pratico in java!!
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 20:21   #5
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Qualche giorno fa un amico mi ha chiesto di aiutarlo su un esercizio scolastico penso identico al tuo, e glielo avevo fatto così

Codice:
package provanico;

import java.util.Random;

public class ProvaNico 
{
	public static void main(String[] args)
	{
		int[] interiDiversi = new int[10];
		Random rand = new Random();
		
		int i = 0;
		while(i < interiDiversi.length)
		{
			int interoCasuale = 1 + rand.nextInt(20);
			
			boolean contiene = false;
			for(int j = 0; j < i && !contiene; j++)
			{
				if(interoCasuale == interiDiversi[j])
					contiene = true;
			}
			
			if(!contiene)
				interiDiversi[i++] = interoCasuale;
		}

		for(Integer j : interiDiversi)
			System.out.println(j);
	}
}
Prova un po' a vedere se ti piace

Ultima modifica di ndakota : 09-02-2010 alle 20:26.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 22:39   #6
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
Grazie mille proprio quello che mi serviva!!!
Un ultima cosa!! senti ma se a questo codice voglio aggiungere un ciclo for per stamparmi 11 array diversi di questo tipo come faccio? ad esempio nel codice mio iniziale avevo questo for
Codice:
for(int i=0; i<11; i++){
che mi stampava 11 array da 10 interi! ho provato ad aggiungerlo nel tuo, ma mi stampa 11 array tutti uguali al primo!!
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 23:10   #7
Gold
Member
 
L'Avatar di Gold
 
Iscritto dal: Oct 2002
Messaggi: 133
Quote:
Originariamente inviato da ozzy19 Guarda i messaggi
Ma dove dentro questo ris[j]?

Comunque lo posso fare sia in un modo che nell'altro!! come funziona HashSet? non sono pratico in java!!
Scusami sono un po' rincoglionito e prima mi sa che ho detto una boiata.

Comunque hashset e' una implementazione di set. Non permette elementi duplicati. Quindi un:

while(set.size() != 10) set.add(random)

dovrebbe risolvere i tuoi problemi

Ancora saluto
Gold è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 23:14   #8
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Scusa non riesco a capire cosa intendi Anche perchè temo che tu per 11 array intenda 11 elementi. Ma anche in quel caso non capirei lo stesso
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 23:14   #9
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
Ciao! scusami!! e più precisamente dove dovrei inserire
Codice:
while(set.size() != 10) set.add(random)
nel mio codice?
Codice:
  int max = 20;
		int[] ris = new int[10];

	        int error=0;
		int temp=0;
		
		
		
		// devo stampare  11 array random di 10 interi! 
		for(int i=0; i<11; i++){
			
			for (int k=0; k<ris.length; k++){
	
		
                      \**Questo dovrebbe eliminare i duplicati ma il programma  è  come se va  in loop e si blocca!
**/

/**                         Blocco in loop                    **/
			do{
				temp = (int) (max*Math.random())+1;
				for(int j=0; j<k; j++){
					
					if(ris[j]==temp){
						
						error=1;
					}	
				}
					
			}while(error==1); //esegue il do finchè error=1 
					
				ris[k]=temp;
				
				
				System.out.print(ris[k]+" ");
				
			
/**                         Blocco in loop                    **/
Un ultima cosa, con random intendi il generatore di numeri casuali Math.random()? Scusami ma non sono affatto esperto in java.. sono alle prime armi!!
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 23:18   #10
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Scusa non riesco a capire cosa intendi Anche perchè temo che tu per 11 array intenda 11 elementi. Ma anche in quel caso non capirei lo stesso
Ciao! in pratica il mio output(con eclipse) con il sorgente del mio primo messaggio è questo:
Codice:
11 14 9 10 8 20 8 3 7 13 	
15 13 5 18 20 9 1 19 8 1 		
12 9 12 9 16 7 2 13 17 3 		
18 17 1 14 14 10 1 4 13 20 		
7 15 1 20 9 5 19 8 3 4 		
12 12 18 7 4 20 18 9 20 16 		
19 7 12 14 7 14 7 13 2 16 		
1 8 17 10 17 10 19 7 6 3 		
10 16 8 1 16 2 20 9 8 9 		
18 4 2 8 15 8 4 6 16 12 		
20 20 2 1 20 2 9 9 12 2
Vorrei creare una cosa simile.. mi stampa 11 array da 10 elementi random! però io voglio che gli elemeni di ogni singolo array siano diversi!!
come noti al primo array ci sono due 8! bene io voglio che siano tutti diversi!
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 23:23   #11
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13052
Un HashSet ti permette di avere una collezione che non contiene elementi duplicati, esattamente la definizione di insieme comunemente adottata in matematica.
In pratica puoi risolvere così:

Codice:
HashSet<Integer> set = new HashSet();

Random rnd = new Random();

int max = 20;

while (set.size() < 10) {
set.add(rnd.nextInt(max));
} System.out.println(set);
Questo ti tira fuori qualcosa di questo tipo:

Codice:
[0, 17, 18, 4, 5, 9, 10, 11, 13, 14]
Ovviamente reiterando l'algoritmo intero puoi fare quante sequenze vuoi.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 23:31   #12
Gold
Member
 
L'Avatar di Gold
 
Iscritto dal: Oct 2002
Messaggi: 133
Quote:
Originariamente inviato da ozzy19 Guarda i messaggi
Un ultima cosa, con random intendi il generatore di numeri casuali Math.random()? Scusami ma non sono affatto esperto in java.. sono alle prime armi!!
Intendevo un numero casuale

Se devi solo stampare i numeri e non ti servono gli array per farci altro puoi fare cosi

Codice:
Set set;
for (int i = 0; i < 11; i++){
set = new HashSet(0)
System.out.println("Array numero " + i");
while(set.size() < 10){
int rnd = Math.random() * 100 
set.add(rnd);
System.out.println(rnd);
}
}
Saluto

Edit: quello di warduck e' molto piu' bello :/
Gold è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 23:39   #13
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
perfetto!! problema risolto!! C'è qualche metodo nell'Hashset che permette di ordinarli in maniera cresente gli elementi?
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 23:40   #14
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Ho capito, ti bastava aggiungere un for esterno al mio programma

Codice:
package provanico;

import java.util.Random;

public class ProvaNico 
{
	public static void main(String[] args)
	{
		for(int k = 0; k < 11; k++)
		{
			int[] interiDiversi = new int[10];
			Random rand = new Random();
			
			int i = 0;
			while(i < interiDiversi.length)
			{
				int interoCasuale = 1 + rand.nextInt(10);
				
				boolean contiene = false;
				for(int j = 0; j < i && !contiene; j++)
				{
					if(interoCasuale == interiDiversi[j])
						contiene = true;
				}
				
				if(!contiene)
					interiDiversi[i++] = interoCasuale;
			}
	
			for(Integer j : interiDiversi)
				System.out.print(j + " ");
			
			System.out.println();
		}
	}
}
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 23:43   #15
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da ozzy19 Guarda i messaggi
perfetto!! problema risolto!! C'è qualche metodo nell'Hashset che permette di ordinarli in maniera cresente gli elementi?
No, un insieme è per definizione non numerabile/ordinabile, penso. Non vorrei usare termini sbagliati
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 23:47   #16
Gold
Member
 
L'Avatar di Gold
 
Iscritto dal: Oct 2002
Messaggi: 133
Quote:
Originariamente inviato da ozzy19 Guarda i messaggi
perfetto!! problema risolto!! C'è qualche metodo nell'Hashset che permette di ordinarli in maniera cresente gli elementi?
Usando un TreeSet() al posto del hashset
Gold è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2010, 23:59   #17
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
Ok davvero grazie di cuore!!! Finalmente ci ho capito qualcosa!!! grazie davvero a tutti coloro che mi hanno risposto e saputo aiutare: Gold, ndakota, WarDuck
Alla prossima!!!
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2010, 00:36   #18
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Posso darti un altro modo io!

Se hai un range massimo, ad esempio vuoi n numeri casuali e il massimo è m puoi fare in questo modo!

Codice:
private static ArrayList<Integer> lista = crea();
private static ArrayList<Integer> crea(){
    ArrayList<Integer> tmp = new ArrayList<Integer>();
    for(int i = 0; i<=m; i++)tmp.add(i);
    return tmp;
}
public static int[] getArray(int n){
    ArrayList<Integer> tmp = (ArrayList)lista.clone();
    int array[] = new int[n];
    for(int i = 0; i<array.length; i++)
            array[i] = tmp.remove(new Random().nexInt(tmp.size()));
}
se non sbaglio dovrebbe essere O(n)
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2010, 09:22   #19
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
NON SI RISOLVONO ESERCIZI SCOLASTICI PER INTERO, COME LO DEVO DIRE ?

PS: è maiuscola perché sto urlando

Ultima modifica di cionci : 10-02-2010 alle 09:27.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2010, 11:15   #20
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
Salve! non sono esercizi scolastici, ma volevo solo crearmi un programmino di estrazioni casuali(Win4Life, infatti gli array sono composti da 10 elementi composti da numeri casuali da 1 a 20!), 11 array perchè se non erro (statistica) sono minimo 11 sistemi che bisogna realizzare per vincere almeno un premio base!!
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio HUAWEI MatePad Air recensione: OLED opaco e tast...
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica NVIDIA RTX Spark: il PC Windows on ARM costruito...
Motorola razr fold, dalla conchiglia al formato a libro. La recensione Motorola razr fold, dalla conchiglia al formato ...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo Nokia Innovation Day 2026: la sovranità e...
ROG XBOX Ally X20 disponibile in Italia:...
Un banner pubblicitario può bastare per ...
Elon Musk è riuscito a farci (far...
Microsoft svela MAI-Base-2, un modello M...
Offerte Amazon fino al -50%: AirPods Pro...
Engwe fa sul serio: e-bike economica con...
La PEC italiana punta all'Europa: Aruba ...
Meta rilascia Muse Spark Open: per esegu...
Da Apple a Nvidia, le invenzioni tecnolo...
NVIDIA Hyperion sulle future Volvo: la c...
Xiaomi 17T e 17T Pro in offerta Amazon: ...
NASA e JAXA insieme per esplorare le lun...
Segnali una falla e rischi un reato: il ...
Haier, TV 4K in offerta su Amazon: QLED ...
Redmagic 12 Pro+ ufficiale in Cina: raff...
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: 13:04.


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