Pagina 1 di 1

java generazione n caratteri random non ripetuti [RISOLTO]

Inviato: sabato 16 giugno 2007, 13:41
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)

Re: java generazione n caratteri random non ripetuti

Inviato: sabato 16 giugno 2007, 14:12
da Uno
Hai postato in modo errato il link, ecco quello giusto

http://www.javafaq.nu/java-example-code-184.html%22

Re: java generazione n caratteri random non ripetuti

Inviato: sabato 16 giugno 2007, 15:04
da Ichigo85
Grazie!Ho corretto!Ora..qualcuno mi aiuta?

Re: java generazione n caratteri random non ripetuti

Inviato: sabato 16 giugno 2007, 15:55
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)

Re: java generazione n caratteri random non ripetuti

Inviato: sabato 16 giugno 2007, 16:03
da Ichigo85
Ho capito!Perfetto grazie!

Re: java generazione n caratteri random non ripetuti

Inviato: sabato 16 giugno 2007, 17:08
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! ;)

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

Inviato: sabato 16 giugno 2007, 18:10
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