[Funkcja]Wybieranie losowej liczby

0

Czy istnieje jakaś wbudowana funkcja do wybierania random (losowej) liczby np z przedziału 1-100 ? Jeśli nie to jak można by ją stworzyć samodzielnie? Czekam na jakiekolwiek sugestię i dziękuję z góry.

0

Wszystko ładnie pięknie, ale potrzebuję jeszcze wybierania losowego w array lub arraylist. Próbowałem podkładać pod ten skrypt, ale nie wychodziło.
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class random {
    
    public static void main(String[] args) {
    
    Set<Integer> set = new HashSet<Integer>();    //Zbior, w którym trzymamy wylosowane liczby
    int ile = 1;            //Ilosc liczb do wylosowania
    int max = 10;            //Wielkosc zbioru z jakiego bedziemy losowac
    
    Random rand = new Random();
    

    //Losowanie liczb
    while (set.size() < ile) {
        set.add(new Integer(rand.nextInt(max)));
    }
    
    //Wypisanie wylosowanych liczb
    for(Integer i : set) {
        System.out.print(i + " ");
    }
    
    }
    
} 

Może jednak da się go przerobić na wybieranie stringów z tablicy ?

0

To w pakiecie util jest klasa Random?
int liczba = (int)(Math.random()*max);

0
krzysiumed napisał(a)

To w pakiecie util jest klasa Random?
int liczba = (int)(Math.random()*max);

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Random.html

0
divix napisał(a)

Wszystko ładnie pięknie, ale potrzebuję jeszcze wybierania losowego w array lub arraylist. Próbowałem podkładać pod ten skrypt, ale nie wychodziło.
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class random {
    
    public static void main(String[] args) {
    
    Set<Integer> set = new HashSet<Integer>();    //Zbior, w którym trzymamy wylosowane liczby
    int ile = 1;            //Ilosc liczb do wylosowania
    int max = 10;            //Wielkosc zbioru z jakiego bedziemy losowac
    
    Random rand = new Random();
    

    //Losowanie liczb
    while (set.size() < ile) {
        set.add(new Integer(rand.nextInt(max)));
    }
    
    //Wypisanie wylosowanych liczb
    for(Integer i : set) {
        System.out.print(i + " ");
    }
    
    }
    
} 

Może jednak da się go przerobić na wybieranie stringów z tablicy ?

Ale o co dokładnie Ci chodzi?

0

O wybranie losowych wpisów z arraylisty. I jeżeli liczba liter wylosowanych będzie większa niż np 20 literek to wtedy pętla się kończy.

0

A w czym jest problem ?

  ArrayList<String> al=.....;
  ......
  Random r=new Random();
  for(int i=0;i<granica;i++)
  {
      int indeks=r.nextInt(al.size());
      System.out.println(al.get(indeks));
  }
0

Tak, ale wynik chce dodać do output="wyrazy"
package package1;

import java.io.*;
import java.util.*;


public class Pirate implements Talking{
	public String file;
	private ArrayList <Pirates2> pirates2;
	ArrayList<String> words = new ArrayList<String>();
	
	public Pirate(String f) {
		pirates2=new ArrayList<Pirates2>();
		file=f;
	}
	public String talk(int i){
		String output=" ";
		load();
		//all();
		for (int q=0; q<pirates2.size(); q++){
			Random rand = new Random();
			words.add(new String(rand.nextLong()(pirates2)));
                        output = output + " ";
			System.out.println("Words: "); all2();
                        if(output.length()<20)
				break;
		}
		return output;
	}
	public void load() {
		Scanner infile;
		try {
			infile = new Scanner(new InputStreamReader (new FileInputStream(file)));
		for (int i=0; i<150; i++){
			String n = infile.next();
			Pirates2 w = new Pirates2(n);
			pirates2.add(w);
		}
		infile.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public void add(Pirates2 w) {
        pirates2.add(w);
     }
	public void all()
	{
		System.out.println(pirates2.size());
		//pirates2.shuffle();
		for(Pirates2 w:pirates2)
		{
			System.out.println(w.toString());
		}
	}
	public void all2()
	{
		System.out.println(words.size());
		//pirates2.shuffle();
		for(String w:words)
		{
			System.out.println(w + " ");
		}
	}

}

Do outputa mają być dodawane stringi, które zostały wylosowane w funkcji.

0
  //zamiast System.out.println(al.get(index));
  output+=" "+al.get(index);
0
public String talk(int i){
		String output=" ";
		load();
		//all();
		for (int q=0; q<pirates2.size(); q++){
			Random rand = new Random();
			int index=rand.nextInt(pirates2.size());
			output+=" "+pirates2.get(index);
			if(output.length()<20)
			break;
		}
		return output;
	}

Moze mi ktos powiedzieć czemy ta pętla nie działa? Funkcja drukuje tylko 1 wyraz, czyli po pierwszy razie jest Od razu break.

0

if(output.length()<20) break;

Zatem jeśli długość pierwszego wylosowanego stringa będzie<19, to nastąpi break
BTW wyrzuć

Random rand = new Random();

poza pętle

0

Tak, masz rację, właśnie wpadłem też na to sekundę przed Tobą :), i dzięki za porady, zmienie położenie randoma. Jeszcze raz wielkie dzięki wszystkim.

1 użytkowników online, w tym zalogowanych: 0, gości: 1