为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码为什么没有产生随机数呢

//导入java.util.Arrays;
import java.util.Arrays;


public class HelloWorld {
    public static void main(String[] args) {
        
         // 创建对象,对象名为hello
    	HelloWorld hello = new HelloWorld();
        
        // 调用方法并将返回值保存在变量中
		int[] nums = hello.getArray(8);
        
        // 将数组转换为字符串并输出
		System.out.println(Arrays.toString(nums)); 
	}

	/*
	 * 功能:创建指定长度的int型数组,并生成100以内随机数为数组中的每个元素赋值
	 * 定义一个带参带返回值的方法,通过参数传入数组的长度,返回赋值后的数组
	 */
	public int[] getArray(int length) {
        // 定义指定长度的整型数组
		int[] nums = new int[length];
        // 循环遍历数组赋值
		for (        int i: nums   ) {
            i=(int)(Math.random()*100);
			// 产生一个100以内的随机数,并赋值给数组的每个成员      
        
		}
		return nums; // 返回赋值后的数组
	}
}


正在回答

2 回答

楼主的getArray函数里的循环有问题,int i:nums 的时候,它相当于new出了一个i,然后把nums的对应的值给i,但是你之后让i=(int)(Math.random()*100);,这个结束后,i虽然变了,但是你并没有把它设回到nums数组里,也就是说,i并不是nums的地址,改变了i并不能改变nums中对应的值,所以,建议楼主如下写法:

for ( int i=0;i<length;i++ ) {
    nums[i]=(int)(Math.random()*100);
    // 产生一个100以内的随机数,并赋值给数组的每个成员

}

这样,将nums值设回去,就有随机的值了

0 回复 有任何疑惑可以回复我~
#1

qq_来自荒野渴望繁华_0 提问者

额,谢谢啊,我刚学完C,感觉Java和C中的一些概念还是区别挺大的。你的意思是,new出来的i并不等于nums[x],只是nums[x]把,它的值传递给了i,而改变i的值并不可以改变nums[x],因为他们在内存中的地址不一样。这是不是和C中的传值引用和按地址引用可以类比呢?
2015-12-09 回复 有任何疑惑可以回复我~
#2

qq_来自荒野渴望繁华_0 提问者

非常感谢!
2015-12-09 回复 有任何疑惑可以回复我~
#3

子木李 回复 qq_来自荒野渴望繁华_0 提问者

对的,可以这么理解,其实本来也就是这么理解的
2015-12-09 回复 有任何疑惑可以回复我~
#4

qq_来自荒野渴望繁华_0 提问者 回复 子木李

thanks
2015-12-09 回复 有任何疑惑可以回复我~
查看1条回复

额,谢谢啊,我刚学完C,感觉Java和C中的一些概念还是区别挺大的。你的意思是,new出来的i并不等于nums[x],只是nums[x]把,它的值传递给了i,而改变i的值并不可以改变nums[x],因为他们在内存中的地址不一样。这是不是和C中的传值引用和按地址引用可以类比呢?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

这段代码为什么没有产生随机数呢

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信