Wątek przeniesiony 2017-06-10 10:12 z Java przez bogdans.

Generator liczb losowych - przeróbka z int na double

0

WItam.

Mam taki kod do generowania liczb losowych:

package projektEvolution;

import java.util.*;

public class RandomGen {
    
    int randInt(int x, int y)
    {
        Random r = new Random();
        int number = r.nextInt(y)-x;
        return number;
    }
    
    int[][] randFunction(int ax, int ay, int bx, int by)
    {
        int[][] finalTab;
        finalTab = new int[ay-ax][2];
        int limiter = ay-ax;
        for(int iter = 0; iter < limiter; iter++)
        {
            finalTab[iter][0] = randInt(ax, ay); // wspolrzedna pozioma
            finalTab[iter][1] = randInt(bx, by); // wspolrzedna pionowa
        } 
        return finalTab;
    }
}

Chciałbym przerobić go na generator liczb typu double, jednak natrafiam na problemy przy r.nextDouble() ... jakieś sugestie?

Obecny kod:


```package projektEvolution;

import java.util.*;

public class RandomGen {
    
    int randInt(int x, int y)
    {
        Random r = new Random();
        int number = r.nextInt(y)-x;
        return number;
    }
    
        double randDouble(double x, double y)
    {
        Random r = new Random();
        double number = r.nextDouble(y)-x; <- tu pokazuje błąd
        return number;
    }
    
    int[][] randFunctionInt(int ax, int ay, int bx, int by)
    {
        int[][] finalTab;
        finalTab = new int[ay-ax][2];
        int limiter = ay-ax;
        for(int iter = 0; iter < limiter; iter++)
        {
            finalTab[iter][0] = randInt(ax, ay); // wspolrzedna pozioma
            finalTab[iter][1] = randInt(bx, by); // wspolrzedna pionowa
        } 
        return finalTab;
    }
    
        double[][] randFunctionDouble(double ax, double ay, double bx, double by)
    {
        double[][] finalTab;
        finalTab = new double[ay-ax][2]; <- i tutaj
        double limiter = ay-ax;
        for(int iter = 0; iter < limiter; iter++)
        {
            finalTab[iter][0] = randDouble(ax, ay); // wspolrzedna pozioma
            finalTab[iter][1] = randDouble(bx, by); // wspolrzedna pionowa
        } 
        return finalTab;
    }
}
0

wpisz r.nextDouble()*y i bedziesz miał co chciałeś (zamiast r.nextDouble(y));

0

Dzieki.
Ucuiłałem taki kod i mam wyjątek:

package projektEvolution;

import java.util.*;

public class RandomGen {
    
    public double randDouble(double x, double y)
    {
        Random r = new Random();
        double number = r.nextDouble()*y-x;
        return number;
    }
    
    public double[][] randFunctionDouble(double ax, double ay, double bx, double by, int ilePunktow)
    // a - punkt początkowy zakresu na osiach x,y // b - punkt końcowy zakresu na osiach x,y //
    {
        double[][] finalTab;
        finalTab = new double[ilePunktow][2];               // Generacja tablicy punktów puli początkowej //
        double limiter = ay-ax;
        for(int iter = 0; iter < limiter; iter++)
        {
            finalTab[iter][0] = randDouble(ax, ay); // Wspolrzedna pozioma
            finalTab[iter][1] = randDouble(bx, by); // Wspolrzedna pionowa   
        } 
        return finalTab;
    }
        
        public static void main(String[] args) 
        {
            RandomGen test = new RandomGen(); 
            double[][] tabTest;
            tabTest = test.randFunctionDouble(1, 5, 1, 5, 3);
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    System.console().writer().println(tabTest[i][j]);
                }
            }
}

run:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at projektEvolution.RandomGen.randFunctionDouble(RandomGen.java:22)
at projektEvolution.RandomGen.main(RandomGen.java:32)
C:\Users\yardi\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml Java returned: 1
BUILD FAILED (total time: 5 seconds)

Niestety jestem zielony w javie i w netbeans - nie wiem o co mu chodzi ...

0

Przekraczasz zakres tablicy, zamień

for (int i = 0; i < 3; i++)

na

for (int i = 0; i < ilePunktow; i++)

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