使用import java.util.Random; nextInt和用户输入

时间:2013-11-26 11:59:26

标签: java random

我对java很新,所以这可能看起来像一个基本问题。我试图使用随机java.util和nextInt在用户输入指定的范围内创建一个随机数,然后将其转换为字符,然后存储在数组中;

gridCells[x][y] = (char)(r.nextInt(numberOfRegions) + 'a');

但是,因为我希望nextInt使用用户输入,虽然我控制了值的范围,但我猜测错误是因为nextInt认为numberOfRegions可能是0?

// Map Class
import java.util.Random;

public class map
{
    // number of grid regions 
    private int numberOfRegions; 
    private boolean correctRegions = false 

    // grid constants
    private int xCord = 13; // 13 so the -1 makes 12 for a 12x12 grid
    private int yCord = 13; 

    // initiate grid
    private int[][] gridCells = new int[xCord][yCord];

    Random r = new Random();

    map() { }

    // ask for number of regions
    public void regions()
    {
        keyboard qwerty = new keyboard(); // keyboard class
        while(correctRegions = false)
        {
            System.out.print("Please enter the number of regions: ");
            numberOfRegions = qwerty.readInt();
            if(numberOfRegions < 2) // nothing less then 2 accepted
            {
                correctRegions = false;
            }
            else if(numberOfRegions > 4) // nothing greater then 4 accepted
            {
                correctRegions = false;
            }
            else
            {
                correctRegions = true;
            }
        }
    }

    // fills the grid with regions
    public void populateGrid()
    {
        for(int x =0; x<gridCells[x].length-1; x++) // -1 to avoid outofboundsexception error 
        {
            for(int y =0; y<gridCells[y].length-1; y++)
            {
                gridCells[x][y] = (char)(r.nextInt(numberOfRegions) + 'a');    
            }
        }
    }

    public void showGrid()
    {
        for(int x=0;x<gridCells[x].length-1; x++)
        {
            for(int y=0; y<gridCells[x].length-1; y++)
            {
                System.out.print(gridCells[x][y] + " ");
            }
            System.out.println();
        }
    }
}

3 个答案:

答案 0 :(得分:1)

public void populateGrid()
{
    for(int x =0; x<gridCells[x].length-1; x++) // -1 to avoid outofboundsexception error 
    {
        for(int y =0; y<gridCells[y].length-1; y++)
        {
            gridCells[x][y] = (char)(r.nextInt(numberOfRegions) + 'a'); 
        }
    }
}

这是假的,无论是index < array.length还是index <= array.length-1

index < array.length-1很可能不是您的意图。

此外,如果您收到编译错误,可能是因为您没有初始化numberOfRegions。通常,这不是错误而是警告,但是在这种情况下,您的编译器可能会设置为发出错误。试试

private int numberOfRegions = 0;

答案 1 :(得分:1)

你必须知道java.util.random是如何工作的。

Random r = new Random();

int number = r.nextInt(numberOfRegions);

这将产生一个从零(0)到ur numberRegions的整数。 要从生成的随机数范围中排除零,请执行以下操作

int number = 1 + r.nextInt(numberOfRegions);

有了这个,可以生成的最小数量是1

int number = 2 + r.nextInt(numberOfRegions);

有了这个,可以生成的最小数量是2

...and so on

答案 2 :(得分:0)

我找到了一些东西:

您的while条件是作业:

while(correctRegions = false)

你应该写:

while(correctRegions == false) // == is a boolean operator, = is an assignment