[ damson74 @ 09.09.2012. 21:33 ] @
Pozdrav,

Molim za pomoc :-)
Potrebno mi je da generisem random 13 karaktera od kojih ce prvi biti uppercase, i decimalni broj od 1-5.

Hvala
[ nemnesic @ 10.09.2012. 01:32 ] @
evo ti metoda za dobijanje random string-a. Kreni odavde.
pokusaj sam pa se javi.

(ovo je groovy src)

Code:


def static String getRandomCode(int codeLength) {
        String validChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz"

        int maxIndex = validChars.length()
        String code = ""

        Random rnd = new Random(System.currentTimeMillis() * (new Random().nextInt()))

        for (i in 0..codeLength) {
            int rndPos = Math.abs(rnd.nextInt() % maxIndex);
            code += validChars.charAt(rndPos)
        }

        return code

    }

[ del-boy @ 10.09.2012. 01:33 ] @
Code:

    public static String GetRandom() {
        Random r = new Random();
        StringBuffer buffer = new StringBuffer();
        // first upper case
        char first = (char)('A' + r.nextInt('Z' - 'A'));
        buffer.append(first);
        
        // 11 random chars
        for (int i = 0; i < 11; i++) {
            buffer.append((char)('!' + r.nextInt('~' - '!')));
            
            /*if (r.nextBoolean()) {
                buffer.append((char)('a' + r.nextInt('z'-'a')));
            }
            else {
                buffer.append((char)('A' + r.nextInt('Z'-'A')));
            }*/
        }
        
        
        
        // last digit
        buffer.append((char)('1' + r.nextInt('6' - '1')));
        return buffer.toString();
    }


Otkucah ti ovo na brzinu. Ovo ti daje string od 13 karaktera sa prvim velikim slovom i poslednjom cifrom između 1 i 5 (inclusive). Karakteri između mogu biti bilo koji vidljivi karakteri iz ascii tabele. Ako ti trebaju samo slova skloni prvu liniju u for petlji i otkometariši ostatak petlje.

Ovaj kod generiše ovakve stringove:
Code:

IE.1kinAnqmX1
CPI<gi8X&LR"2
PShz0ns&(rIQ2
A'=$w^Q^Hnu%1
AX@zlm5k7Ga25
N3Q%6GX0yo^e5
Wg+(#(_"?.n;4
Lj>tTE&@3r@82
WghU9N;dhwyU3
E[(v\OXpv`D03


Ako zameniš kod sa onim zakomentarisanim u for petlji dobićeš ovakve stringove:
Code:

TYGDKlQoBNVf4
MSfQSptpbHmg3
YQggUIcLHmKI3
CfBvMakGEEXx4
PctECwaXGDsl1
JAVYEiombVVN1
VjRghYRnGiUQ3
FuFnyjjpKGnR4
KOYiCSyYxoOt5
FXKVAQbuYHlf3
[ damson74 @ 10.09.2012. 23:45 ] @
Mozda sam iskomplikovao pitanje, jer nikako ne dobijam prvo veliko, a i kako da definisem bas decimalne random brojeve. Zato evo kompletnog pitanja pa me samo usmerite. Mucim se vec nekoliko dana a ovo je 8-mo od 15 :-)
Napraviti klasu Učenik koja ima od podataka Ime, Prezime i prosečnu ocenu. Zatim napraviti pomoćnu klasu koja ima metodu koja vraća reč od 13 random slova pri čemu je prvo slovo veliko a ostala su mala, i metodu koja vraća slučajni decimalni broj u intervalu od 1 do 5. U Main klasi kreirati dve instance klase Učenik i svaku od njih napuniti random podacima koristeći pomoćnu klasu. Prikazati rezultat rada.
[ Burgos @ 11.09.2012. 00:53 ] @
Zapravo, ti želiš dve metode?
[ nemnesic @ 11.09.2012. 00:57 ] @
Ako pogledas nase odgovore, mozes lako resiti ovaj zadatak. Nemoj da trazis
samo gotovo resenje.

Nn
[ damson74 @ 11.09.2012. 09:54 ] @
ok, evo resenja, samo jos decimalu da sredim na random broju

klasa Ucenik:

package newpackage;


public class Ucenik {
private String ime;
private String prezime;
private double prosecna_ocena;

/**
* Prazan konstruktor
*/
public Ucenik() {
}

/**
* Konstruktor koji prima atribute klase
* @param ime
* @param prezime
* @param prosecna_ocena
*/
public Ucenik(String ime, String prezime, double prosecna_ocena) {
this.ime = ime;
this.prezime = prezime;
this.prosecna_ocena = prosecna_ocena;
}

/**
* Kopi konstruktor
* @param p
*/
public Ucenik(Ucenik p){
this.ime = p.getIme();
this.prezime = p.getPrezime();
this.prosecna_ocena = p.getProsecna_ocena();
}

/**
* @return the ime
*/
public String getIme() {
return ime;
}

/**
* @param ime the ime to set
*/
public void setIme(String ime) {
this.ime = ime;
}

/**
* @return the prezime
*/
public String getPrezime() {
return prezime;
}

/**
* @param prezime the prezime to set
*/
public void setPrezime(String prezime) {
this.prezime = prezime;
}

/**
* @return the prosecna_ocena
*/
public double getProsecna_ocena() {
return prosecna_ocena;
}

/**
* @param prosecna_ocena the prosecna_ocena to set
*/
public void setProsecna_ocena(double prosecna_ocena) {
this.prosecna_ocena = prosecna_ocena;
}

/**
* Tekstualna prezentacija instance klase
* @return tekstualni opis instance klase
*/
@Override
public String toString(){
return ime + " " + prezime + " Prosecna ocena: " + prosecna_ocena;
}

}

klasa Pomocna:


package newpackage;
import java.util.Random;
public class Pomocna {


/**
* Privatni konstruktor
* Ova klasa nikad neće biti instancirana pošto ima samo static metode
*/
public Pomocna() {
}

/**
* Metoda koja kreira slučajnu reč od brSlova slova
* tako da ima prvo slovo veliko i brSlova-1 malih slova
*
* @param brSlova
* @return slučajna reč
*/
public static String slučajnaReč(int brSlova){
Random r = new Random();
String reč = "";
reč += (char) ('A' + r.nextInt(26));
for(int i=0; i<brSlova-1; i++)
reč += (char) ('a' + r.nextInt(26));
return reč;
}
/**
* Metoda koja vraća broj u intervalu od a do b
* @param a jedna granica intervala
* @param b druga granica intervala
* @return slučajni boroj iz zadatog intervala
*/
public static int slučajniBrojInterval(int a, int b){
Random r = new Random();
int random = b>a?(a + r.nextInt(b-a)):(b + r.nextInt(a-b));
return random;
}
}

klasa Main:


package newpackage;
public class Main {
/**
* Prazan konstruktor
*/
public Main() {

Ucenik druga = new Ucenik();
druga.setIme(Pomocna.slučajnaReč(13));
druga.setPrezime(Pomocna.slučajnaReč(13));
druga.setProsecna_ocena(Pomocna.slučajniBrojInterval(0,5));
System.out.println(druga);
}


/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new Main();
// TODO code application logic here
}
}
[ damson74 @ 11.09.2012. 10:31 ] @
Evo i decimalnog dela, prepravka na double u klasi Pomocna


public static double slučajniBrojInterval(double a, double b){
Random r = new Random();
double random = b>a?(a + r.nextDouble()):(b + r.nextDouble());
return random;
}


[ djoka_l @ 11.09.2012. 10:54 ] @
Daj malo razmišljaj pre nego što počneš da kodiraš!

Prvo, metoda nextDouble daje pseudoslučajni decimalni broj u opsegu od 0.0 do 1.0, pa nikako nećeš na gornji način dobiti opseg od 1.0 do 5.0
Drugo, ako znaš, na primer, da dobiješ slučajni integer u nekom opsegu, trebalo bi da znači da znaš da dobiješ i u nekum drugom opsegu. Recimo u opsegu od 100 do 500. Kapiraš? Samo podeliš slučajni int u opsegu 100-500 sa 100.00 i dobio si šta si hteo, umesto da komplikuješ sa metodom koju ne poznaješ.
Treće: pogledaj ovo

double random = a+(b-a)*r.nextDouble();

Da li se dobija ispravan opseg? Da li je uoopšte potrebno petljanje sa trinarnim operatorom "?:", ili može i bez njega da se dobije rezultat?

Savet, nauči da razmišljaš, teži ka jednostavnim rešenjima. Sedni sa što boljom idejom kako da rešiš zadatak, pre nego što otkucaš makar jednu liniju koda.
[ damson74 @ 11.09.2012. 15:12 ] @
Izvini ali nisam imao vremena da razmisljam. "Kodiranjem" se bavim nepuna 4 dana, hitno mi je trebao odgovor na postavljeno pitanje. Zato sam i postavio pitanje da bih dobio neki odgovor ili bar smernicu. Ono do cega sam dosao sam postavio da bi neko drugi imao koristi od toga, jer ovakvo pitanje ne postoji na forumu. U narednom periodu cu se truditi da sto vise vremena provedem uceci programiranje u Javi, pa cu verovatno posle nekog vremena moci i da razmislim sta bih sve mogao da uradim po pitanju nekog problema.
Hvala za savet, izvini ako opet nesto lupim, jer planiram jos da ucim po pitanju OOP uopste.
Pozdrav
[ IcemanX @ 11.09.2012. 17:12 ] @
Kada sam video postavku zadatka setih se odmah da sam imao ovakav slican zadatak u prvoj godini faxa..Moguce da je i ovaj zadatak sa predmeta CS111 kod Opacica ..Ali nbt evo ti u attachementu slicna stvar pa se snadji ;)
[ damson74 @ 11.09.2012. 19:38 ] @
Jeste, hvala. JA sam bolid koji je na master studijama izabralo CS111 kao izborni, sam Mateja mi rece "sta ti je to trebalo" :-), a ja mislio kao da se nateram da naucim oop :-)
Mozes da zamislis sistemasa koji ne razmislja dalje od skripte(5-10min) unapred, u oop i modeliranju :-) HAOS
Nadam se da cu ga spremiti za novembar, koji ce verovatno biti u oktobru jer je sad oktobarI :-)
Pozz
[ IcemanX @ 11.09.2012. 22:29 ] @
Od Mateje mozes da naucis dosta ako te zanima OOP i Java..samo mora da sednes i vezbas..ni ja nisam Bog zna sta,vise se igram s Linuxom i ostalim stvarima ..Ali evo uzeo sam knjigu za Javu od 1000 strana i kad fino predjem sve znacu samo osnove i 5 % od Jave ..Iskustvo i vezba stalna donose znanje