java generazione n caratteri random non ripetuti [RISOLTO]

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Ichigo85
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1092
Iscrizione: venerdì 20 ottobre 2006, 15:49

java generazione n caratteri random non ripetuti [RISOLTO]

Messaggio da Ichigo85 »

Ciao gente!!Sono ore che sto girando per internet...Purtroppo il tempo stringe per me e ho bisogno di chiedervi una cosa non molto complicata,ma di cui non ho molto tempo per arrovellarmici!
Allora, ho bisogno per un mio progetto universitario di una classe che genera n caratteri random non ripetuti. Ho provato a cercar su internet e l'unica cosa minimamente utile che ho trovato è a questo link
Però questa classe genera solo lettere alfabetiche, ripetute in più! Qualcuno mi può aiutare per fare in modo che possano esserci anche caratteri come
'@', '/' e altri...e in più non ci siano ripetizioni nella generazione?
So che non è una cosa complicata, ma nel frattempo devo pensare ad altre cose..
Vi sono immensamente grato se mi date una mano!!  (b2b)
Ultima modifica di Anonymous il sabato 16 giugno 2007, 18:08, modificato 1 volta in totale.
"Se schivo, non verrò tagliato!
Sto proteggendo qualcuno, non morirà!
Se attacco, TAGLIERÒ!!" (Ichigo, Bleach)
Avatar utente
Uno
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 412
Iscrizione: sabato 3 marzo 2007, 21:47
Contatti:

Re: java generazione n caratteri random non ripetuti

Messaggio da Uno »

Hai postato in modo errato il link, ecco quello giusto

http://www.javafaq.nu/java-example-code-184.html%22
porco diodo...
Avatar utente
Ichigo85
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1092
Iscrizione: venerdì 20 ottobre 2006, 15:49

Re: java generazione n caratteri random non ripetuti

Messaggio da Ichigo85 »

Grazie!Ho corretto!Ora..qualcuno mi aiuta?
"Se schivo, non verrò tagliato!
Sto proteggendo qualcuno, non morirà!
Se attacco, TAGLIERÒ!!" (Ichigo, Bleach)
Avatar utente
Uno
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 412
Iscrizione: sabato 3 marzo 2007, 21:47
Contatti:

Re: java generazione n caratteri random non ripetuti

Messaggio da Uno »

Ichigo85 ha scritto: Grazie!Ho corretto!Ora..qualcuno mi aiuta?
Non conosco il Java, ma posso scriverti questo pseudo-codice che non dovresti avere troppi problemi ad adattare:

Codice: Seleziona tutto


boolean Flags[LENGTH] = false;

for i from 0 to 9
{
    int rand
    rand = Random (0, LENGTH - i)
    while Flags[rand]
    {
         rand++
         if rand > LENGTH
         {
              rand = 0
         }
    }

    Flags[rand] = true;

     print (rand)
}
estrae 10 numeri casuali senza ripetizioni nell'intervallo [0,LENGTH]. (spero ;D)
porco diodo...
Avatar utente
Ichigo85
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1092
Iscrizione: venerdì 20 ottobre 2006, 15:49

Re: java generazione n caratteri random non ripetuti

Messaggio da Ichigo85 »

Ho capito!Perfetto grazie!
"Se schivo, non verrò tagliato!
Sto proteggendo qualcuno, non morirà!
Se attacco, TAGLIERÒ!!" (Ichigo, Bleach)
Avatar utente
Uno
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 412
Iscrizione: sabato 3 marzo 2007, 21:47
Contatti:

Re: java generazione n caratteri random non ripetuti

Messaggio da Uno »

Ichigo85 ha scritto: Ho capito!Perfetto grazie!
Se hai risolto metti RISOLTO come prefisso del titolo del post e non sarebbe male se postassi il codice in Java per semplificare future ricerche, buona programmazione! ;)
porco diodo...
Avatar utente
Ichigo85
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1092
Iscrizione: venerdì 20 ottobre 2006, 15:49

Re: java generazione n caratteri random non ripetuti [RISOLTO]

Messaggio da Ichigo85 »

Ok...non so se servirà a qualcuno, ma ecco il codice!

Codice: Seleziona tutto

import java.util.Random;

public class RandomChar {
	private static final Random RANDOM = new Random();

	public static String randomAscii(int count) {
		return random(count, 32, 127, false, false);
	}

	public static String random(int count, int start, int end, boolean letters, boolean numbers) {
		return random(count, start, end, letters, numbers, RANDOM);
	}

	public static String random(int count, int start, int end, boolean letters, boolean numbers, Random random) {

		int revcount=0;
		boolean repeted=false;

		if (count == 0) {
			return "";
		} else if (count < 0) {
			throw new IllegalArgumentException("Requested random string length " + count + " is less than 0.");
		}

		if ((start == 0) && (end == 0)) {
			end = 'z' + 1;
			start = ' ';
			if (!letters && !numbers) {
				start = 0;
				end = Integer.MAX_VALUE;
			}
		}

		StringBuffer buffer = new StringBuffer();
		String randomString;
		int gap = end - start;

		while (count-- != 0) {
			char ch;

			ch = (char) (random.nextInt(gap) + start);

			if ((letters && numbers && Character.isLetterOrDigit(ch))
					|| (letters && Character.isLetter(ch))
					|| (numbers && Character.isDigit(ch))
					|| (!letters && !numbers)) {
				revcount++;
				repeted=false;
				if (revcount>1){
					for (int i=0; i<revcount-1;i++) {
						if (ch == buffer.charAt(i)) {
							count++;
							revcount--;
							repeted=true;
						}
					}
				}
				if (repeted==false) buffer.append(ch);
			} else {
				count++;
			}
		}
		randomString=buffer.toString();
		return randomString;
	}

}
Per farlo mi sono basato su una classe che ho trovato su internet. L'ho modificata in modo da non aver ripetizioni.
Basta fare un main dove chiama il metodo randomAscii
"Se schivo, non verrò tagliato!
Sto proteggendo qualcuno, non morirà!
Se attacco, TAGLIERÒ!!" (Ichigo, Bleach)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti