Random String – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Random String – Java – Fórum – Programujte.comRandom String – Java – Fórum – Programujte.com

 

JavaLama
~ Anonymní uživatel
12 příspěvků
24. 2. 2011   #1
-
0
-

Zdravim.

Jsem naprostý začátečník, to úvodem.
Potřeboval bych generovat 20-ti místné kladné číslo, ale long má pouze 19 míst.
Tak mě napadlo, nemusí to být nutně číslo, může to být i 20 znaků.
A teď otázka, zda lze generovat přes Rnd.get i String znaky, na netu jsem to nenašel.

Děkuji za odpověď.

Nahlásit jako SPAM
IP: 78.102.186.–
nervak0
Věrný člen
24. 2. 2011   #2
-
0
-

Znaky jsou taky čísla, resp. číselné hodnoty znaků. Můžeš napsat

char c = 65; // char c = 'A';
Takže jen potřebuješ generovat hodnoty v určitém rozsahu. Obecně třeba takto
String s = "";

Random rnd = new Random();
for (int i = 0; i < 20; i++)
s += (char)('0' + rnd.nextInt(10));
A konkrétně tady stačí vygenerované hodnoty rovnou převádět na string (což se přičtením ke stringu udělá automaticky)
String s = "";

Random rnd = new Random();
for (int i = 0; i < 20; i++)
s += rnd.nextInt(10);

Nahlásit jako SPAM
IP: 213.211.51.–
JavaLama
~ Anonymní uživatel
12 příspěvků
24. 2. 2011   #3
-
0
-

Perfektní. Naprosto mi to vyhovuje. Děkuji za radu.

Nahlásit jako SPAM
IP: 78.102.186.–
JavaLama
~ Anonymní uživatel
12 příspěvků
24. 2. 2011   #4
-
0
-

Ještě takový dotaz:

Šlo by vygenerované číslo pro zobrazení rozdělit na bloky např. pomlčkou?

Příklad:
Vygeneruje se mi číslo: 11112222333344445555
Chci, aby se mi zobrazovalo takto: 1111-2222-3333-4444-5555

Děkuji předem za rady.

Nahlásit jako SPAM
IP: 78.102.186.–
JavaLama0
Duch
24. 2. 2011   #5
-
0
-

Tak už jsem na to přišel pomocí příkazu: substring(int startIndex, int endIndex)

Nahlásit jako SPAM
IP: 78.102.186.–
Jsem začátečník. Mějte se mnou trpělivost.
crAzY^
~ Moderátor
+10
Grafoman
24. 2. 2011   #6
-
0
-

stačilo by upravit ten for cyklus:

for (int i = 0; i < 20; i++){

if( i != 0 && (i % 4) == 0)
s += '-';
s += rnd.nextInt(10);
}

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
JavaLama0
Duch
25. 2. 2011   #7
-
0
-

Tak a teď mám jiný problém. Jak odeslat vygenerovaný klíč z jedné třídy do druhé? Když přidám metodu třídy static (getKey()), tak mi píše chybu: non-static variable _key cannot be referenced from a static context
Když static nepřidám, tak mi píše: non-static method getKey() cannot be referenced from a static context

Fakt už si nevím rady.
To jsou jen části kódů.

Generator.java

	

public void Generator
{
Random rnd = new Random();
for (int i = 0; i < 20; i++)
_newCode += rnd.nextInt(10);
setKey(_newCode);
}

public void setKey(String key)
{
key = _key;
}

public String getKey() // Tady mi pise chybu
{
return _key;
}


Porovnani.java



String _klic = Generator.getKey();

Nahlásit jako SPAM
IP: 78.102.186.–
Jsem začátečník. Mějte se mnou trpělivost.
crAzY^
~ Moderátor
+10
Grafoman
25. 2. 2011   #8
-
0
-

nemuzes volat nestatickou metodu, staticky... musis neejprve vytvorit objekt...

Generator gen = new Generator();

klic = gen.getKey();

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
JavaLama0
Duch
25. 2. 2011   #9
-
0
-

Ano, tohle funguje, děkuji.
Další dotaz, co když budu chtit převzít vygenerovaný kód do dalších tříd?
Z Generate.java do Porovnani.java a např. do VypisKod.java


Když si v nich vytvořím nový objekt, tak bude v každé třídě jiný, ne? A já bych chtěl v Porovnani i VypisKod stejný key, který se mi vygeneruje v Generate.


Omlouvám se za hloupé dotazy ale učím se. :)

Nahlásit jako SPAM
IP: 78.102.186.–
Jsem začátečník. Mějte se mnou trpělivost.
crAzY^
~ Moderátor
+10
Grafoman
25. 2. 2011   #10
-
0
-

můžeš to udělat přes návrhový vzor singleton

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
JavaLama0
Duch
25. 2. 2011   #11
-
0
-

Skoro perfektní. Přesně tohle jsem potřeboval. Ale nevím, zda dělám chybu já, nebo je někde jinde, ale když volám _code = Generator.getInstance().getKey(); tak mi vrací stále stejné číslo, negeneruje nové. V čem je tedy problém?


Zde je kód Generator.java



import java.util.Random;

public class Generator
{
protected String _newCode = "";
public Generator(){}

public static Generator getInstance()
{
return Singleton._instance;
}

public String getKey()
{
Random rnd = new Random();
for (int i = 0; i < 20; i++)
_newCode += rnd.nextInt(10);
return _newCode;
}

@SuppressWarnings("synthetic-access")
private static class Singleton
{
protected static final Generator _instance = new Generator();
}
}

Nahlásit jako SPAM
IP: 78.102.186.–
Jsem začátečník. Mějte se mnou trpělivost.
crAzY^
~ Moderátor
+10
Grafoman
25. 2. 2011   #12
-
0
-

public String getKey()


{

Random rnd = new Random();
_newCode = new String();
for (int i = 0; i < 20; i++)

_newCode += rnd.nextInt(10);

return _newCode;

}

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
crAzY^
~ Moderátor
+10
Grafoman
26. 2. 2011   #13
-
0
-

jo a mimochodem, ten singleton se dělá následovně... takhle tam máš zbytečné více tříd...

import java.util.Random;


public class Generator

{

protected String _newCode = "";
static private Generator _instance = null;

public Generator(){}



public static Generator getInstance()

{
if(Generator._instance == null)
Generator._instance = new Generator();
return Generator._instance;

}



public String getKey()

{

Random rnd = new Random();
_newCode = new String();

for (int i = 0; i < 20; i++)

_newCode += rnd.nextInt(10);

return _newCode;

}

}

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
JavaLama0
Duch
26. 2. 2011   #14
-
0
-

EDIT: Takže nový kód se generuje po každém volání, bohužel při volání z jiné třídy i ve stejný čas se vygeneruje vždy jiný key. Potřeboval bych na jednu season při volání ze dvou tříd stejný key. Původní můj návrh sice takto fungoval, ze dvou tříd stejný key, ale nový kód se negeneroval při dalším volání.

Nahlásit jako SPAM
IP: 78.102.186.–
Jsem začátečník. Mějte se mnou trpělivost.
crAzY^
~ Moderátor
+10
Grafoman
26. 2. 2011   #15
-
0
-

počkej, co teda vlastně chceš?

EDIT: psal si, že ti to stále vrací stejné číslo, a teď že ti to pokaždé vrací jiné?

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
JavaLama0
Duch
26. 2. 2011   #16
-
0
-

Tak jinak. Špatně jsem to formuloval. Generátor bych nechal tak, ten už funguje perfektně a to, co jsem chtěl já by bylo složité a po ránu zjišťuji i nesmyslné.

Takže jinak. Zavolám z Vypis.java třídu Generator.java, ta mi vygeneruje kód a Vypis.java mi ho vypíše.
Otázka zní: Mohu předat hodnotu do Porovnej.java z Vypis.java, aniž bych vytvářel novou instanci?

Nahlásit jako SPAM
IP: 78.102.186.–
Jsem začátečník. Mějte se mnou trpělivost.
nervak0
Věrný člen
26. 2. 2011   #17
-
0
-

Můžeš ho předat jako parametr konstruktoru, metodě, zapsat do členské proměnné.

Ale spíš napiš, co přesně se snažíš vytvořit, je to nějaké zamotané.

Nahlásit jako SPAM
IP: 213.211.51.–
JavaLama0
Duch
26. 2. 2011   #18
-
0
-

Tak už nic, už jsem to vyřešil pomocí MySQL databáze, generované kódy si ukládám a u dané postavy je znovu načítám.
Ale děkuji všem mnohokrát za užitečné rady.

Nahlásit jako SPAM
IP: 78.102.186.–
Jsem začátečník. Mějte se mnou trpělivost.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

String to hex ebo Byte()"string" — založil Roman Uherek

RANDOM z TXT — založil kodooo

Potíže s Random — založil solomon

Random hodnota — založil tOreee

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý