Výsledky 1 až 22 z 22

Téma: JAVA a metoda Math.random

Hybrid View

Předcházející příspěvek Předcházející příspěvek   Další příspěvek Další příspěvek
  1. #1

    Standardní JAVA a metoda Math.random

    Potřeboval bych poradit!Potřebuju nastavit rozsah Math.randomu() na: Od druhěho prvku pole po předposlední prvek pole!(pole[1]-pole[pole.length-1]).A ještě ošetřit aby už navracela hodnoty, které už vrátila!Moc dííkec!
    P4 2,4GHz 533 MHZ FSB, MSI 6580 Intel845P, 512 DDR 333MHZ, ATI RADEON 8500 128 MB DDR, SEAGATE 80GB&IBM 36 GB, 3dmark2001 - 8050b,3dmark 2003 - 1100b, AquaMark3 - 15000b

  2. #2

    Standardní

    Ehmm, promin, ale asi jsem dobre neporozumel zadani... .

    pozn: pole.length-1 neni predposledni, ale posledni prvek pole.

  3. #3
    Senior Member minceVIP Avatar uživatele sisi
    Založen
    24.02.2003
    Bydliště
    Auckland, NZ
    Příspěvky
    2 176
    Vliv
    294

    Standardní

    No, predpokladam, ze chces nieco taketo:
    Kód:
    int myRandomNumber = (int)Math.floor(Math.random() * (myArray.length - 2)) + 1;
    (kde myArray je to (aspon trojprvkove) pole a myRandomNumber je nahodne vybrany index v tom poli vynimajuc prvy & posledny index)

    A Math.random() neprinutis, aby Ti viackrat nevratila rovnaku hodnotu ... to si uz musis osetrit sam.
    Intel Core 2 Duo E6600 @ 3.2GHz (8 * 400MHz) @ 1.3V with Zalman CNPS9500 AT @ 1800RPM, ASUS P5B Deluxe/WiFi, 2x1GB Corsair Twin2X PC2-6400 DDRAM @ 400MHz (4-4-4-12) @ 2.1V, Leadtek 8800GT 512MB, WD Caviar SE16 250GB, Asus DRW-1608P3S, Creative SB Audigy Value, Logitech X-230 speakers, Enermax Liberty 400W, 2x120mm Thermaltake case fan @ 1800RPM, Thermaltake Aguila black case, HP LP2065 LCD, Logitech MX400

  4. #4

    Standardní

    sisi: tak to jsem teda pochopil uplne jinak. Podle me chce vracet takove nahodne cislo, ktere uz se vyskytuje v tom poli nekde od 1. po predposledni prvek a zaroven se toto vracene cislo nesmi opakovat ? ? ?

    A nebo snad chce to pole plnit nahodnym neopakujicim se cislem ? ? ?

    Jo a mezi nama - Math.random() k cili asi nepovede, to spis java.util.Random

  5. #5
    Senior Member minceVIP Avatar uživatele sisi
    Založen
    24.02.2003
    Bydliště
    Auckland, NZ
    Příspěvky
    2 176
    Vliv
    294

    Standardní

    Citace Původně odeslal viki_
    sisi: tak to jsem teda pochopil uplne jinak. Podle me chce vracet takove nahodne cislo, ktere uz se vyskytuje v tom poli nekde od 1. po predposledni prvek a zaroven se toto vracene cislo nesmi opakovat ? ? ?
    Moze byt... ale je to to iste ako vyberat nahodne (neopakujuci sa) index.
    Jo a mezi nama - Math.random() k cili asi nepovede, to spis java.util.Random
    To je uz snad jedno... Math.random() je len "convenience wrapper" nad Random - i tak si bude musiet sam zariadit to neopakovanie cisiel, co by uz ale mohol zvladnut aj sam...
    Intel Core 2 Duo E6600 @ 3.2GHz (8 * 400MHz) @ 1.3V with Zalman CNPS9500 AT @ 1800RPM, ASUS P5B Deluxe/WiFi, 2x1GB Corsair Twin2X PC2-6400 DDRAM @ 400MHz (4-4-4-12) @ 2.1V, Leadtek 8800GT 512MB, WD Caviar SE16 250GB, Asus DRW-1608P3S, Creative SB Audigy Value, Logitech X-230 speakers, Enermax Liberty 400W, 2x120mm Thermaltake case fan @ 1800RPM, Thermaltake Aguila black case, HP LP2065 LCD, Logitech MX400

  6. #6

    Standardní

    Paráda dík!Snad to nějak zesmolím!Sem začátečník takže toho ještě moc nevím!Chtěl sem prostě v poli přeházet hodnoty ale první a poslední prvek aby zůstal na své pozici!Moc dík!
    P4 2,4GHz 533 MHZ FSB, MSI 6580 Intel845P, 512 DDR 333MHZ, ATI RADEON 8500 128 MB DDR, SEAGATE 80GB&IBM 36 GB, 3dmark2001 - 8050b,3dmark 2003 - 1100b, AquaMark3 - 15000b

  7. #7

    Standardní

    Citace Původně odeslal sisi
    Citace Původně odeslal viki_
    sisi: tak to jsem teda pochopil uplne jinak. Podle me chce vracet takove nahodne cislo, ktere uz se vyskytuje v tom poli nekde od 1. po predposledni prvek a zaroven se toto vracene cislo nesmi opakovat ? ? ?
    Moze byt... ale je to to iste ako vyberat nahodne (neopakujuci sa) index.
    No podle me to neni to same - co kdyz se v tom poli napr. bude vickrat opakovat stejne cislo ? Napr. pole [1,2,5,3,5,4,5,5,5,1]

    - kdyz bych chtel vracet nahodne cislo v rozsahu 1-5 nebude to totez jako vybirat nahodny index, protoze napr. cetnost cisla 5 je vetsi nez cisla 1.

  8. #8
    Senior Member minceVIP Avatar uživatele sisi
    Založen
    24.02.2003
    Bydliště
    Auckland, NZ
    Příspěvky
    2 176
    Vliv
    294

    Standardní

    Citace Původně odeslal viki_
    Citace Původně odeslal sisi
    Citace Původně odeslal viki_
    sisi: tak to jsem teda pochopil uplne jinak. Podle me chce vracet takove nahodne cislo, ktere uz se vyskytuje v tom poli nekde od 1. po predposledni prvek a zaroven se toto vracene cislo nesmi opakovat ? ? ?
    Moze byt... ale je to to iste ako vyberat nahodne (neopakujuci sa) index.
    No podle me to neni to same - co kdyz se v tom poli napr. bude vickrat opakovat stejne cislo ? Napr. pole [1,2,5,3,5,4,5,5,5,1]

    - kdyz bych chtel vracet nahodne cislo v rozsahu 1-5 nebude to totez jako vybirat nahodny index, protoze napr. cetnost cisla 5 je vetsi nez cisla 1.
    Aha, tak to som zase ja presne nepochopil, co si mal mysli. V takomto pripade to samozrejme jedno nie je...
    Intel Core 2 Duo E6600 @ 3.2GHz (8 * 400MHz) @ 1.3V with Zalman CNPS9500 AT @ 1800RPM, ASUS P5B Deluxe/WiFi, 2x1GB Corsair Twin2X PC2-6400 DDRAM @ 400MHz (4-4-4-12) @ 2.1V, Leadtek 8800GT 512MB, WD Caviar SE16 250GB, Asus DRW-1608P3S, Creative SB Audigy Value, Logitech X-230 speakers, Enermax Liberty 400W, 2x120mm Thermaltake case fan @ 1800RPM, Thermaltake Aguila black case, HP LP2065 LCD, Logitech MX400

  9. #9

    Standardní

    Citace Původně odeslal Kenny
    Paráda dík!Snad to nějak zesmolím!Sem začátečník takže toho ještě moc nevím!Chtěl sem prostě v poli přeházet hodnoty ale první a poslední prvek aby zůstal na své pozici!Moc dík!
    He he, tak to mi pripada jako odlisne zadani - proc to nereknes rovnou ? A jakeho typu jsou prvky toho pole ? Objekty nebo nejaky primitivni datovy typ - treba int ?

  10. #10

    Standardní

    To pole je datového typu char!Měl sem za úkol ze školy napsat program který načte ze standartního vstupu string a vněm na každe slovo aplikovat to sčím sem potřeboval poradit!Prostě začateční písmeno a koncové ponechat a uvnitř slova náhodně rozházet!Na výstupu musí byt takto upravený string.Už to mám akorát nemám ošetřené opakování indexu toho náhodného charu.
    P4 2,4GHz 533 MHZ FSB, MSI 6580 Intel845P, 512 DDR 333MHZ, ATI RADEON 8500 128 MB DDR, SEAGATE 80GB&IBM 36 GB, 3dmark2001 - 8050b,3dmark 2003 - 1100b, AquaMark3 - 15000b

  11. #11

    Standardní

    Kenny: Ja bych radsi na to michani pouzil treba Collections.shuffle(), at clovek znovu nevynaleza kolo.

    Kód:
    /*
     * RandomPokus.java
     *
     * Created on 13. prosinec 2003, 9:43
     */
    
    import java.util.*;
    public class RandomPokus {
        
        private RandomPokus() {
        }
        
        public static List toCharList(char[] _array, int _start, int _end) {
            List ret = new ArrayList();
            for&#40;int i=_start; i<_end; i++&#41; ret.add&#40;new Character&#40;_array&#91;i&#93;&#41;&#41;;            
            return ret;
        &#125;
        
        public static char&#91;&#93; shuffleIt&#40;char&#91;&#93; _array&#41; &#123;
            if&#40; &#40;_array==null&#41;||&#40;_array.length<4&#41; &#41; return _array;        
            
            //zamichat
            List list = toCharList&#40;_array, 1, _array.length - 1&#41;;
            Collections.shuffle&#40;list&#41;;                
            
            //nove vystupni pole
            char&#91;&#93; ret = new char&#91;_array.length&#93;;
            for&#40;int i=0; i<list.size&#40;&#41;; i++&#41; 
                ret&#91;i+1&#93; = &#40;&#40;Character&#41;&#40;list.get&#40;i&#41;&#41;&#41;.charValue&#40;&#41;;
            ret&#91;0&#93; = _array&#91;0&#93;;
            ret&#91;_array.length - 1&#93; = _array&#91;_array.length - 1&#93;;
            
            return ret;
        &#125;
                
        public static void main&#40;String&#91;&#93; args&#41; &#123;
            String slovo = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
            char&#91;&#93; shuffled = shuffleIt&#40;slovo.toCharArray&#40;&#41;&#41;;
            
            System.out.println&#40;slovo&#41;;
            System.out.println&#40;new String&#40;shuffled&#41;&#41;;    
        &#125;    
    &#125;

  12. #12

    Standardní

    Ty si blazen!Tos vševchno napsal kvuli mně?Tak dík!Já to zkusím použít, ale nevím jestli to zvládnu!Moc dík
    P4 2,4GHz 533 MHZ FSB, MSI 6580 Intel845P, 512 DDR 333MHZ, ATI RADEON 8500 128 MB DDR, SEAGATE 80GB&IBM 36 GB, 3dmark2001 - 8050b,3dmark 2003 - 1100b, AquaMark3 - 15000b

  13. #13

    Standardní

    Jasne brouku - no mezi nama - vic jak 5 minut to nezabralo.

  14. #14

    Standardní

    Tak to si blázen!Ted se mě asi budeš smát když ti napišu, že tomu moc nerozumím!Nebo spíš aji jo, ale můj program je jenom s metodou main a nic jiného!Takže si nedokážu představit jak tam nacpu to cos mně napsal!

    Můj program vypadá takto:

    Kód:
    import java.util.*;								import java.io.*;								
    public class SemestralniProjekt11&#123;
    	public static void main &#40;String&#91;&#93;args&#41;&#123;
    		String retezec;
    		String rozdel = new String&#40;&#41;;
    		String end = new String&#40;&#41;;
    		String mezera = " ";
    		BufferedReader r;
    		r = new BufferedReader&#40;new InputStreamReader&#40;System.in&#41;&#41;;
    		while &#40;true&#41;&#123;
    			try &#123;
    				System.out.println&#40;"\nVloz retezec&#58; "&#41;;
    				retezec = r.readLine&#40;&#41;;
    		        if &#40;retezec == null&#41;&#123;
    					break;
    				&#125;
    		        StringTokenizer st = new StringTokenizer&#40;retezec,mezera&#41;;
    				while &#40;st.hasMoreTokens&#40;&#41;&#41;&#123;
    					rozdel = st.nextToken&#40;&#41;;
    					char&#91;&#93; pole = new char&#91;rozdel.length&#40;&#41;&#93;;	//Vytvoreni pole o velikosti slova
    					char&#91;&#93; pole2 = new char&#91;rozdel.length&#40;&#41;&#93;;	//Vytvoreni pole o velikosti slova
    					for &#40;int i=0;i<rozdel.length&#40;&#41;;i++&#41;&#123;		//Nacitani slova ze stringu do pole
    						pole&#91;i&#93; = rozdel.charAt&#40;i&#41;;				//Nacitani slova ze stringu do pole
    					&#125;
    					pole2&#91;0&#93;=pole&#91;0&#93;;							//Zakotveni prvniho znaku pole
    					pole2&#91;pole2.length-1&#93;=pole&#91;pole.length-1&#93;;	//Zakotveni posledniho znaku pole
    					for &#40;int i=1;i<pole.length-1;i++&#41;&#123;
    						int a = &#40;int&#41;&#40;Math.random&#40;&#41; * &#40;pole.length - 2&#41;&#41; + 1;	//Vyber nahodne pozice
    						pole2&#91;i&#93;=pole&#91;a&#93;;								//vlozeni do pole2 na i-tou pozici prvek s pole s nahodnou pozici
    
    			&#125;
    					String pomoc = new String&#40;pole2&#41;;			//Vytvoreni stringu pomoc z pole2
    					end = end.concat&#40;pomoc&#41;;					//Spojeni stringu end a pomoc
    					end = end.concat&#40;mezera&#41;;					//Pridana mezere na konec stringu end
    				&#125;
    				System.out.println&#40;"\nZnetvoruji&#58; "+end&#41;;
    				end = new String&#40;&#41;;								//Nulovani stringu end
    			&#125;
    		    catch &#40;Exception e&#41;&#123;
    				System.out.println&#40;"Chyba cteni!"&#41;;
    				break;
    			&#125;
    		&#125;
    		System.out.println&#40;"Konec!"&#41;;
    	&#125;
    &#125;
    P4 2,4GHz 533 MHZ FSB, MSI 6580 Intel845P, 512 DDR 333MHZ, ATI RADEON 8500 128 MB DDR, SEAGATE 80GB&IBM 36 GB, 3dmark2001 - 8050b,3dmark 2003 - 1100b, AquaMark3 - 15000b

  15. #15

    Standardní

    Takze:
    1. dej to do tagu Code (tlacitko na liste nad oknem, kam se zadavaji prispevky)

    2. char[] pole vytvaris zbytecne slozite - staci napsat: char[] pole = rozdel.toCharArray();

    3. jak to tam nacpes ? - uplne jednoduse - slovo, ktere chces upravit zadas jako parametr do metody shuffleIt a vysledkem je upravene "slovo" - musi to byt uplne jasne, kdyz se podivas na main() v tom mem programku.

    Tzn., ze StringTokenizerem si rozsekas vstup na jednotliva slova, ktera jen prozenes tou funkci.

  16. #16

    Standardní

    pokusím se!thanks
    P4 2,4GHz 533 MHZ FSB, MSI 6580 Intel845P, 512 DDR 333MHZ, ATI RADEON 8500 128 MB DDR, SEAGATE 80GB&IBM 36 GB, 3dmark2001 - 8050b,3dmark 2003 - 1100b, AquaMark3 - 15000b

  17. #17

    Standardní

    Tak vlozil sem to dotoho vpohodě, ale nešlo by to bez těch metod?prostě jenom do teho mainu?Já vím, že je to zbytečně složitější, ale ještě se moc v metodách neorientuju!Některým věcem cos tam psal trošku nerozumím!
    P4 2,4GHz 533 MHZ FSB, MSI 6580 Intel845P, 512 DDR 333MHZ, ATI RADEON 8500 128 MB DDR, SEAGATE 80GB&IBM 36 GB, 3dmark2001 - 8050b,3dmark 2003 - 1100b, AquaMark3 - 15000b

  18. #18

    Standardní

    Citace Původně odeslal Kenny
    Tak vlozil sem to dotoho vpohodě, ale nešlo by to bez těch metod?prostě jenom do teho mainu?Já vím, že je to zbytečně složitější, ale ještě se moc v metodách neorientuju!Některým věcem cos tam psal trošku nerozumím!
    Tak na to rychle zapomen - jenom pekne pouzivej metody .

  19. #19

    Standardní

    Tak třeba nerozumím tomuto:
    Kód:
                for&#40;int i=_start; i<_end; i++&#41; ret.add&#40;new Character&#40;_array&#91;i&#93;&#41;&#41;;            
        
    toto je to míchání?
               Collections.shuffle&#40;list&#41;;                
            
          
    toto taky moc nevim!Co je Character?a list.get&#40;&#41;? - to je součást 
    metody Collections.shuffle&#40;&#41;;                 
                  
                ret&#91;i+1&#93; = &#40;&#40;Character&#41;&#40;list.get&#40;i&#41;&#41;&#41;.charValue&#40;&#41;;
    Musím otom něco vědět!protože to musím nějak popsat!Thanks
    P4 2,4GHz 533 MHZ FSB, MSI 6580 Intel845P, 512 DDR 333MHZ, ATI RADEON 8500 128 MB DDR, SEAGATE 80GB&IBM 36 GB, 3dmark2001 - 8050b,3dmark 2003 - 1100b, AquaMark3 - 15000b

  20. #20

    Standardní

    cele je to zalozeno na staticke metode Collections.shuffle(list). ktera nahodne zamicha List.

    Nas problem je v tom, ze mame pole primitivniho datoveho typu char[] - to nelze zpracovat touto metodou primo. Musime ho nejakym zpusobem prevest na List. (k vytvoreni Listu tam mam metodu toCharList() )
    Character je objektovy typ pro char (podobne jako napr. Integer pro int atp.)

    metody v Listu: add(prvek) = pridani prvku, get(i) - nacteni prvku na pozici i (viz dokumentace)

    Takze obsah pole hodime do Listu, ten se zamicha a zamichany List zpet do pole, pricemz se musi osetrit jeste ten prvni a posledni prvek. To je vsechno.


    Kód:
    ret&#91;i+1&#93; = &#40;&#40;Character&#41;&#40;list.get&#40;i&#41;&#41;&#41;.charValue&#40;&#41;;
    tohle vezme z listu prvek na pozici i a prevede ho zpatky na typ char (v Listu jsou Objekty typu Character = obalovy objektovy typ pro char)

  21. #21

    Standardní

    Ok!Thanks!Pořádně si to musím projít!
    P4 2,4GHz 533 MHZ FSB, MSI 6580 Intel845P, 512 DDR 333MHZ, ATI RADEON 8500 128 MB DDR, SEAGATE 80GB&IBM 36 GB, 3dmark2001 - 8050b,3dmark 2003 - 1100b, AquaMark3 - 15000b

  22. #22

    Standardní

    Samozrejme, ze by se to michani dalo udelat primo vlastnim algoritmem jak si to delal puvodne:
    nekde bokem na hromadce by sis drzel indexy prvku, ktere jeste nebyly prohozene a z toho by se nahodne vybiralo, prohozene prvky by se z tohoto seznamu odebraly - tim by se zajistilo, at se jejich vyber neopakuje - to by taky nebylo slozite, ale bylo by s tim trosku vic prace.

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •