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!
Printable View
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!
Ehmm, promin, ale asi jsem dobre neporozumel zadani... :-(.
pozn: pole.length-1 neni predposledni, ale posledni prvek pole.
No, predpokladam, ze chces nieco taketo:
(kde myArray je to (aspon trojprvkove) pole a myRandomNumber je nahodne vybrany index v tom poli vynimajuc prvy & posledny index)Kód:int myRandomNumber = (int)Math.floor(Math.random() * (myArray.length - 2)) + 1;
A Math.random() neprinutis, aby Ti viackrat nevratila rovnaku hodnotu :-)... to si uz musis osetrit sam.
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
Moze byt... ale je to to iste ako vyberat nahodne (neopakujuci sa) index.Citace:
Původně odeslal viki_
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... :-)Citace:
Jo a mezi nama - Math.random() k cili asi nepovede, to spis java.util.Random
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!
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]Citace:
Původně odeslal sisi
- 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... :-)Citace:
Původně odeslal viki_
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 ?Citace:
Původně odeslal Kenny
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.
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(int i=_start; i<_end; i++) ret.add(new Character(_array[i]));
return ret;
}
public static char[] shuffleIt(char[] _array) {
if( (_array==null)||(_array.length<4) ) return _array;
//zamichat
List list = toCharList(_array, 1, _array.length - 1);
Collections.shuffle(list);
//nove vystupni pole
char[] ret = new char[_array.length];
for(int i=0; i<list.size(); i++)
ret[i+1] = ((Character)(list.get(i))).charValue();
ret[0] = _array[0];
ret[_array.length - 1] = _array[_array.length - 1];
return ret;
}
public static void main(String[] args) {
String slovo = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] shuffled = shuffleIt(slovo.toCharArray());
System.out.println(slovo);
System.out.println(new String(shuffled));
}
}
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
Jasne brouku :-) - no mezi nama - vic jak 5 minut to nezabralo.
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{
public static void main (String[]args){
String retezec;
String rozdel = new String();
String end = new String();
String mezera = " ";
BufferedReader r;
r = new BufferedReader(new InputStreamReader(System.in));
while (true){
try {
System.out.println("\nVloz retezec: ");
retezec = r.readLine();
if (retezec == null){
break;
}
StringTokenizer st = new StringTokenizer(retezec,mezera);
while (st.hasMoreTokens()){
rozdel = st.nextToken();
char[] pole = new char[rozdel.length()]; //Vytvoreni pole o velikosti slova
char[] pole2 = new char[rozdel.length()]; //Vytvoreni pole o velikosti slova
for (int i=0;i<rozdel.length();i++){ //Nacitani slova ze stringu do pole
pole[i] = rozdel.charAt(i); //Nacitani slova ze stringu do pole
}
pole2[0]=pole[0]; //Zakotveni prvniho znaku pole
pole2[pole2.length-1]=pole[pole.length-1]; //Zakotveni posledniho znaku pole
for (int i=1;i<pole.length-1;i++){
int a = (int)(Math.random() * (pole.length - 2)) + 1; //Vyber nahodne pozice
pole2[i]=pole[a]; //vlozeni do pole2 na i-tou pozici prvek s pole s nahodnou pozici
}
String pomoc = new String(pole2); //Vytvoreni stringu pomoc z pole2
end = end.concat(pomoc); //Spojeni stringu end a pomoc
end = end.concat(mezera); //Pridana mezere na konec stringu end
}
System.out.println("\nZnetvoruji: "+end);
end = new String(); //Nulovani stringu end
}
catch (Exception e){
System.out.println("Chyba cteni!");
break;
}
}
System.out.println("Konec!");
}
}
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.
pokusím se!thanks
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 :-).Citace:
Původně odeslal Kenny
Tak třeba nerozumím tomuto:
Musím otom něco vědět!protože to musím nějak popsat!ThanksKód:for(int i=_start; i<_end; i++) ret.add(new Character(_array[i]));
toto je to míchání?
Collections.shuffle(list);
toto taky moc nevim!Co je Character?a list.get()? - to je součást
metody Collections.shuffle();
ret[i+1] = ((Character)(list.get(i))).charValue();
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.
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)Kód:ret[i+1] = ((Character)(list.get(i))).charValue();
Ok!Thanks!Pořádně si to musím projít!
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.