`
vanceinfo_xuefei
  • 浏览: 9364 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Random类

    博客分类:
  • JAVA
阅读更多
    昨天在学习《Java编程思想》中的多态时,碰到了有关产生随机数的一些知识,一开始也把我自己搞晕了,后来查看API才发现其中的缘由。
    在下面的代码中,RandomShapeGenerator 类是通过产生随机数,然后根据产生的随机数的值来确定该创建哪个对象。但是在程序运行时出现了一个让我感到很奇怪的地方:
如果创建Random对象的代码如下:
    private Random random = new Random();
那么每次运行的结果的顺序就不一样
如果创建Random对象的代码如下:
    private Random random = new Random(47);
那么每次运行结果的顺序就是一样的

    刚开始我想了好久都没想通,后来查看API才知道是怎么个原因,API上面关于创建Random对象的两种方式说法如下:
    public Random():
    创建一个新的随机数生成器。此构造方法将随机数生成器的种子设置为某个值,该值与此构造方法的所有其他调用所用的值完全不同。
    public Random(long seed)
    使用单个 long 种子创建一个新的随机数生成器。该种子是伪随机数生成器的内部状态的初始值
    从上面的两种构造方法的解释中可以看出,两者唯一的不同就在于:一个产生的随机数的种子是不一定的,另一个产生随机数的种子是以参数的形式出现,是不会变化的。所以就会出现用第一种构造方法产生随机数,每次产生的随机数的顺序都不一样,用第二种构造方法产生的随机数顺序每次都是一样的
    更通俗的理解是:每个种子的背后都隐藏着一条固定的数据排列,只要你以某个固定种子产生随机数,那么顺序就是一样的。只有用不同的种子产生的随机数顺序则不同。
package vanceinfo.xuefei.shape;

public class Shape 
{
	public void draw()
	{
		
	}
	public void erase()
	{
		
	}
}


package vanceinfo.xuefei.shape;

public class Square extends Shape 
{
	public void draw()
	{
		System.out.println("Square.draw");
	}
	public void erase()
	{
		System.out.println("Square.erase");
	}
}


package vanceinfo.xuefei.shape;

public class Triangle extends Shape 
{
	public void draw()
	{
		System.out.println("Triangle.draw");
	}
	public void erase()
	{
		System.out.println("Triangle.erase");
	}
}


package vanceinfo.xuefei.shape;

public class Circle extends Shape 
{
	public void draw()
	{
		System.out.println("Circel.draw");
	}
	public void erase()
	{
		System.out.println("Circle.erase");
	}
}


package vanceinfo.xuefei.shape;

import java.util.Random;

public class RandomShapeGenerator 
{
	private Random random = new Random();

        //private Random random = new Random(47);
       public Shape next()
	{
		switch(random.nextInt(3))
		{
			default:
			case 0: return new Circle();
			case 1: return new Square();
			case 2: return new Triangle();
		}
	}
}


package vanceinfo.xuefei.shape;

public class Shapes 
{
	private static RandomShapeGenerator ranGenerator = new RandomShapeGenerator();
	
	public static void main(String[] args)
	{
		Shape[] s = new Shape[9];
		
		for(int i =0;i<s.length;i++)
		{
			s[i] = ranGenerator.next();
			
		}
		for(Shape shape : s)
		{
			shape.draw();
		}
	}
}
0
0
分享到:
评论

相关推荐

    07.【Scanner类、Random类、ArrayList类】.zip

    在Java编程语言中,`Scanner类`、`Random类`和`ArrayList类`是三个非常重要的基础组件,它们各自在不同的场景下发挥着关键作用。接下来,我们将详细探讨这三个类的功能、用法以及它们在实际编程中的应用。 首先,...

    Math与Random类笔记

    031108_【第11章:Java常用类库】_Math与Random类笔记

    Random类思维导图.mm

    对于Java中Random类的有关问题做下的思维导图,便于深化记忆,希望对你有帮助!注意:文件为.mm后缀建议下载freemind打开,免费的思维导图软件!

    Java8中的java.util.Random类文章代码

    Java8中的java.util.Random类 文章代码,不多解释啦,不需要你安装其它的jar包。

    Java中Random类.pdf

    Java中Random类 Java中Random类提供了产生多种形式随机数的功能。使用Random类,可以轻而易举地产生所需的所有形式的随机数,十分方便。在程序设计中,需要大量的不同形式的随机数,使用Math类的random()方法还必须...

    day07【Scanner类、Random类、ArrayList类】1

    今天我们学习了Java中的三个重要类:Scanner类、Random类和ArrayList类。这些类都是Java中的基础类,掌握它们是学习Java的基础。 首先,让我们了解什么是API。API(Application Programming Interface)是应用程序...

    java random类

    介绍一下Random类的使用,以及如何生成指定区间的随机数组以及实现程序中要求的几率

    day003【Scanner类、Random类、ArrayList类】.pdf

    在本节内容中,我们将介绍Java编程语言中三个重要的类:Scanner类、Random类和ArrayList类。这三个类分别用于处理输入数据、生成随机数以及数据集合存储。在学习这些类的过程中,我们还将探讨如何通过Java的API文档...

    Java API(String类、Math类、Random类、Runtime类).ppt

    掌握String类和StringBuffer类的使用 了解System类、Runtime类、Math类和Random类的使用 熟悉包装类的使用

    Java软件开发实战 Java基础与案例开发详解 9-6 Random类和Math类 共9页.pdf

    ### Java软件开发实战:Random类和Math类 在Java编程中,`Random`类和`Math`类是非常实用且常用的工具类,它们提供了生成随机数和执行数学运算的方法。本篇将详细介绍这两个类的主要功能及其应用场景。 #### 1. `...

    Java基础第3章(流程控制、Random类).pptx

    本章主要讲解了Java中的流程控制语句,包括IF语句、switch语句以及for和while循环,还有Random类的使用。 1. **流程控制基本概念**: 流程控制语句是用来控制程序执行流程的,使得程序可以根据条件或循环执行特定...

    八数码游戏panel,groupBox,TabControl,point,random类的使用

    在这个项目中,我们将会探讨如何利用C#中的控件,如Panel、GroupBox、TabControl,以及Point和Random类来实现这个游戏的界面和功能。 1. **Panel控件**:在C# Windows Forms应用程序中,Panel是一种容器控件,可以...

    用C++封装的CRandom类

    本文将深入探讨一个名为`CRandom`的类,它被封装用来简化和增强C++中的随机数生成功能。这个类允许开发者轻松地生成指定范围内的随机整数、浮点数以及布尔值,提高了代码的可读性和复用性。 `CRandom`类的核心在于...

    day07【Scanner类、Random类、ArrayList类】.md

    day07【Scanner类、Random类、ArrayList类】.md

    Math与Random类

    NULL 博文链接:https://chaoyi.iteye.com/blog/2082321

    Java基础之Random随机数.docx

    在Java中,Random类提供了产生随机数的方法,下面将详细介绍Random类的使用。 Random类的使用 Random类是Java中生成随机数的主要类,它提供了多种方法来生成随机数。下面是Random类的一些常用方法: * `nextInt()...

    Java中Random类常用方法.pdf

    Java中的`Random`类是`java.util`包下的一个核心类,主要用于生成各种类型的伪随机数。这个类在很多场景下都有广泛的应用,比如在模拟、测试、游戏开发以及密码学等领域。`Random`类生成的随机数是通过特定算法得到...

    java中的Scanner,Random类1

    1. 使用默认种子:默认情况下,`Random`类使用系统当前时间作为种子,这样可以保证每次运行时的随机数序列不完全相同。 2. 显示传入种子:可以通过传递一个`long`类型的整数作为种子来创建`Random`对象,从而可以...

Global site tag (gtag.js) - Google Analytics