random-关于java数组的问题,想来这边问一下

问题描述

关于java数组的问题,想来这边问一下

首先是这样子的,我们作业时是一个打地鼠的小程序,模拟地鼠出现的样子。
我是先设定一个4x4的数组Array[4][4],数组默认值全部设定为0.
然后设定两个随机变量row和col,范围都在0-3之间
然后把Array[row][col]的值从设定为1,以表示地鼠出现的位置。
那接下来就是我想要问的地方;
如何把出现过的位置舍弃,就是希望接下来随机的row和col不要再重复出现同样的数字?

下面是代码片段
int i = new Random().nextInt(4);
int j = new Random().nextInt(4);
GameArray[i][j] = 1; //Susliks appears



for (int index = 0; index < 4; index++){
for (int index2 = 0; index2 < 4; index2++){

if ( GameArray[index][index2] == 1){
System.out.print("o ");
}else{
System.out.print("x ");
}
}
times++;
System.out.println();
}
因为要求是所有的位置都出现过1就结束程序。而我这样子每次循环都要上百次才能结束,所以我想问有没有什么办法可以控制循环次数在一定的范围内?比方说就是已经出现过的数组索引值就不再使用(比如说GameArray[3][3] = 1,那么接下来希望的随机不要再出现[3][3]这样子,如果出现了就跳出index的 for循环体,重新下一次随机)有没有什么办法可以实现?我刚接触java的,好多都还不清楚

解决方案

你的问题有两个:1、出现的位置不允许再出现
2、当所有的位置都为1的时候,程序完成(地鼠已经去过所有的地洞,而且没有重复)。
如果你的问题是这样的话,答案如下:
整个的思路:有一个地鼠类,地鼠类里面有一个创造位置的方法(跑的位置),方法是这样实现的:
地鼠跑到一个位置的时候,将其位置赋给burrows数组且将值赋1,如果随机产生的位置是重复的话,那么就要检查burrows数组里的值是否都
为1(地鼠跑过)。当然在检查的过程中,有地鼠没有跑过的(值为0),那么就要把值赋给rowIndex和colIndex,这是整个说明。

注意事项:里面安全性还需自己验证

package action;

import java.util.Random;

public class Suslik {

/**
 * 随机跑到位置
 * @param row 跑的范围的横坐标
 * @param col 跑的范围的纵坐标
 */
public void createPosition(int row,int col){

    int [][] burrows  = new int[row][col];

    Random creatNum = new Random();
    //横坐标
    int rowIndex;
    //纵坐标
    int colIndex;

    boolean index = false;
    while(!index){
        rowIndex = creatNum.nextInt(row);
        colIndex = creatNum.nextInt(col);
        int sum = 0;
        if(burrows[rowIndex][colIndex] != 0){
            for(int m = 0;m<row;m++){
                for(int n = 0;n<col;n++){
                    if(burrows[m][n] == 0){
                        sum = ++sum;
                        rowIndex = m;
                        colIndex = n;
                        break;
                    }
                    index = true;
                }
                if(sum !=0){
                    index = false;
                    break;
                }
            }
        }
        burrows[rowIndex][colIndex] = 1;
        System.out.println("row:"+rowIndex+" ,col:"+colIndex);
    }
}

public static void main(String [] args){
    new Suslik().createPosition(4, 4);
}

}

解决方案二:

java有关数组的问题
JAVA问题之泛型数组

解决方案三:

可以在声明一个同样的数组,记录对应位置是否出现过

解决方案四:

首先,你随机数的用法不对,要这样:
Random r=new Random();

以后每次这样,不要每次生成新的
r.nextInt();

然后,当发现随机数已经被占用,最简单的方法就是以此位置向后找一个未被占用的即可,

weizhi nextweizhi(int x,int y)

提供本次随机位置x,y,方法寻找x,y或之后第一个未被占用的位置,返回

解决方案五:

    ArrayList list = new ArrayList();
      int n = 10;
      Random rand = new Random();
      boolean[] bool = new boolean[n];
      int num = 0;
      for (int i = 0; i < n; i++) {
       do {
        num = rand.nextInt(n);
       } while (bool[num]);
       bool[num] = true;
       list.add(num);
      }
时间: 2024-10-23 03:07:27

random-关于java数组的问题,想来这边问一下的相关文章

java-Java数组求和,新手求问

问题描述 Java数组求和,新手求问 public class T12 { public static double sumArray(double[] array){ static double sum = 0; int i; for(i=0;i<array.length;i++) sum += array[i]; return sum; } public static void main(String[] args) { double[] array = {123456789}; doubl

关于java数组的深度思考

数组 刚刚开始接触java数组的人都会听到一句类似的话:java是纯面向对象的语言,他的数组也是一个对象.于是乎,笔者就按照一个对象的方式来使用数组,心安理得.直到我接触到C的数组后,才发现将数组作为一个类来使用在实现上是多么的"不自然". 首先我们看一下表面现象,数组创建的时候采用的是如下语句: MyClass[] arr = new MyClass[9]; 而普通类采用的是如下语句: MyClass obj = new MyClass(); 就是说,创建数组的时候不使用小括号传参.

java数组的返回

假定我们现在想写一个方法,同时不希望它仅仅返回一样东西,而是想返回一系列东西.此时,象C和C++这样的语言会使问题复杂化,因为我们不能返回一个数组,只能返回指向数组的一个指针.这样就非常麻烦,因为很难控制数组的"存在时间",它很容易造成内存"漏洞"的出现. Java采用的是类似的方法,但我们能"返回一个数组".当然,此时返回的实际仍是指向数组的指针.但在Java里,我们永远不必担心那个数组的是否可用--只要需要,它就会自动存在.而且垃圾收集器会在

java数组为什么不可以打乱顺序

问题描述 java数组为什么不可以打乱顺序 public class Arrays { public static void main(String[] args) { // TODO Auto-generated method stub int arrays[][] = { {3,4,6,8,6,8}, {5,3,4,9,9,4}, }; for (int i = 0; i< arrays.length;i++){ for (int j =0; j<arrays[i].length; j++

关于JAVA 数组的使用介绍_java

JAVA数组与容器类主要有三方面的区别:效率.类型和保存基本类型的能力.在JAVA中,数组是一种效率最高的存储和随机访问对象引用序列的方式.数组就是一个简单的线性数列,这使得元素访问非常快速.但是为此付出的代价却是数组的大小被固定,并且在其生命周期中不可改变. 由于范型和自动包装机制的出现,容器已经可以与数组几乎一样方便地用于基本类型中了.数组和容器都可以一定程度上防止你滥用他们,如果越界,就会得到RuntimeException异常.数组硕果仅存的优势便是效率,然而,如果要解决更一般化的问题,

我的Java开发学习之旅------&amp;gt;自己编写的Java数组操作工具

看到网上的一段关于对数组操作的代码,觉得有用,在此备用. import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Random; import java.util.TreeMap; /** * @desc 数组操作工具 * @author OuyangPeng * @datatime 2013-5-11 10:31:02 *

java数组随机排序实现代码

例一  代码如下 复制代码 import java.lang.Math; import java.util.Scanner; class AarrayReverse {  public static void main(String args[])  {   int a[]=new int[20];   for(int i=0;i<=15;i++)   {    Scanner sca=new Scanner(System.in);    System.out.println("请输数组元

关于Java 数组内存分配一点认识

 可能Java 数组大家都很熟悉,最近我遇到了一个关于Java 数组内存分配的问题.         呵呵.突然就发现许多书上"基本数据类型存储在栈内存当中,对象则保存在堆内存"这句话完全是错误的.下面是个简单的例子代码: public class Test { public static void main(String[] argv) { // 静态初始化数组 String[] names = { "Michael", "Orson", &q

新手入门:Java数组特点及基本使用技巧

技巧|数组 1.关于数组的特点 1)在Java中,无论使用数组或容器,都有边界检查.如果越界操作就会得到一个RuntimeException异常. 2)数组只能保存特定类型.数组可以保存基本类型,容器则不能.容器不以具体的类型来处理对象,它们将所有对象都按Object类型处理. 3)容器类只能保存对象的引用.而数组既可以创建为直接保存基本类型,也可以保存对象的引用.在容器中可以使用包装类,如Integer.Double等来实现保存基本数据类型值. 4)对象数组和基本类型数组在使用上几乎是相同的: