Diskuze: Proházení čísel v polích (arrays)
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
něco jsem zkusil a takto to dopadlo:
package itn.forum;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
class Data {
private List<Integer> lst;
private static int getRandInt(int n) { return ThreadLocalRandom.current().nextInt(0, n); }
public void mix() {
for(int i = 0, s = lst.size(); i < s; i ++) {
lst.add(lst.remove(getRandInt(s)));
}
}
public Data(Integer[] array) { lst = new LinkedList<>(Arrays.asList(array)); }
@Override
public String toString() {
String s = "";
for(int i = 0; i < lst.size(); i ++) {
s += (i != 0?", ":"") + "{" + lst.get(i) + "}";
}
return "{" + s + "}\n";
}
}
public class TopX {
public static void main(String[] args) {
Data data = new Data(new Integer[] {0, 1, 2, 3}); //obsahuje testovane hodnoty
System.out.println(data);
data.mix();
System.out.println(data);
}
}
Děkuji moc,
funguje to dobře, jen se obávám, že nejsem dost dobrý programátor na to,
abych dané hodnoty dokázal dostat do jednoho pole, se kterým bych potom
nadále pracovat.
řekněme, že budu mít pole o 3 místech, kdy na 1. místě bude 1 na 2. 2 a na 3. 3.. tedy
array[0]=1
array[1]=2
array[2]=3
Teď nějaká funkci, kterou projde, která bude mít za úkol náhodně
proházet pořadí.
A vyhodí jiné pole, které když vypíši bude mít místo původního
výsledku (1,2,3) například výsledek (1,3,2)
Tento poskytnutý program transformuje pole následně do "string" podoby.. a já nejsem schopen to z toho dostat..
A nebo se nemusí využívat polí vůbec.. Zkrátka potřebuji, abych dokázal vypsat určitý počet náhodně jdoucích čísel, která se ale nebudou opakovat.. Napadlo mě řešení zkusit to přes změnu pořadí v poli a lámal jsem si s tím hlavu, bohužel to nedopadlo, proto jsem se šel zeptat sem..
Omlouvám se, ale nedokážu si s tím poradit, ale opravdu děkuji za poskytnuté řešení, ještě zkusím to nějak vytvořit ..
Ahoj, celý tvůj problém lze vyřešit na jeden řádek
ThreadLocalRandom.current().ints(0, 10).distinct().limit(6).forEach(System.out::println);
// ThreadLocalRandom.current().ints(0, 10) --> generátor náhodných čísel v polootevřeném intervalu <0, 10)
// distinct() --> zajistí unikátní čísla
// limit(6) --> počet vygenerovaných unikátních čísel
// forEach --> nakonec se to vypíše do konzole
Tak by si ho mohol poslať a uzavrieť toto vlákno
Promiň za pauzu.
Za mě to vypadá takto:
package itn.forum;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.ThreadLocalRandom;
class Data {
private List<Integer> lst;
private static int getRandInt(int s) { return ThreadLocalRandom.current().nextInt(0, s); }
private void exx() {
int index = getRandInt(lst.size());
int index2 = getRandInt(lst.size());
Integer temp = lst.get(index);
lst.set(index, lst.get(index2));
lst.set(index2, temp);
}
public void mix() {
for(int i = 0; i < lst.size(); i ++) {
exx();
}
}
public Data() { lst = new ArrayList<>(); }
public void add(Integer value) { lst.add(value); }
@Override
public String toString() {
String s = "";
for(int i = 0; i < lst.size(); i ++) {
s += (i != 0?", ":"") + "{" + lst.get(i) + "}";
}
return "{" + s + "}\n";
}
}
public class TopX {
public static void main(String[] args) {
Data data = new Data();
Scanner sc = new Scanner(System.in);
for(;;) {
System.out.println("Zadej číslo, enter to quit: ");
String temp = sc.nextLine();
if(System.lineSeparator().startsWith(temp)) { break; }
data.add(Integer.parseInt(temp));
}
sc.reset();
System.out.println(data);
System.out.println("Mixuji...\n");
data.mix();
System.out.println(data);
}
}
Ahoj.
Tak jsem ještě vylepšil efektivitu mixování:
package itn.forum;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
class Data {
private List<Integer> lst;
private static int getRandInt(int s) { return ThreadLocalRandom.current().nextInt(0, s); }
public void mix() {
for(int i = 0, s = lst.size(); i < s; i ++) {
Collections.swap(lst, getRandInt(s), getRandInt(s));
}
}
public Data() { lst = new LinkedList<>(); }
public Data(Integer[] arr) { this(); lst.addAll(Arrays.asList(arr)); }
public void add(Integer value) { lst.add(value); }
@Override
public String toString() {
String s = "";
for(int i = 0; i < lst.size(); i ++) {
s += (i != 0?", ":"") + "{" + lst.get(i) + "}";
}
return "{" + s + "}\n";
}
}
public class TopX {
public static void main(String[] args) {
// Data data = new Data();
Data data = new Data(new Integer[] {10, 20, 30, 40, 50});
/*
Scanner sc = new Scanner(System.in);
for(;;) {
System.out.println("Zadej číslo, enter to quit: ");
String temp = sc.nextLine();
if(System.lineSeparator().startsWith(temp)) { break; }
data.add(Integer.parseInt(temp));
}
sc.reset();
*/
System.out.println(data);
System.out.println("Mixuji...\n");
data.mix();
System.out.println(data);
}
}
Jirka
Zobrazeno 10 zpráv z 10.