package com.ykmimi.javabianchengsixiang;
/**
* 形状的继承 随机形状生成器
* @author ukyor
*/
import java.util.Random; class Shape{
public void draw() {}
//擦除 erase
public void erase() {}
} //类 圆形 继承自基类 Shape形状
class Circle extends Shape{
public void draw() {System.out.println("Circle.draw()");}
public void erase() {System.out.println("Circle.erase()");}
}
//类 矩形 继承自基类 Shape形状
class Square extends Shape{
public void draw() {System.out.println("Square.draw()");};
public void erase() {System.out.println("Square.erase)");};
}
//类 三角形 继承自基类 Shape形状
class Triangle extends Shape{
public void draw() {System.out.println("Triangle.draw()");};
public void erase() {System.out.println("Triangle.erase)");};
}
//随机形状生成器
class RandomShapeGenerator{
//随机数 (0~(30~110))~(120/200)
private static int randomNumber = (int)((Math.random()*(30+Math.random()*80))+Math.random()*90);
private Random rand = new Random(randomNumber);
public Shape next() {
switch(rand.nextInt(3)) {
default:
case 0 : return new Circle();
case 1 : return new Square();
case 2 : return new Triangle();
}
}
public void print() {
System.out.println(randomNumber);
} }
public class Shapes {
//创建静态的随机形状生成器的对象 gen
private static RandomShapeGenerator gen = new RandomShapeGenerator();
public static void main(String[] args) {
//声明形状数组 s 长度为 9 ;
Shape[] s = new Shape[9];
for(int i=0;i<s.length;i++)
{
//调用gen.next()方法返回随机数0~2 0 1 2
s[i] = gen.next();
}
//遍历s数组到每个shp
for(Shape shp: s)
{
//每个shp执行draw方法
shp.draw();
}
//输出print()方法中的randomNumber
gen.print(); }
}

//

package 随机数;
/**
* 理解随机数,随机数组
* @author ukyozq
*/
import java.util.Random; public class RandomNumberOrArray{ public static void main(String[] args) { //声明随机数int rand.范围[0,98]
int rand = (int)(Math.random()*99);
//输出,每次运行会输出不同的数字.
System.out.println(rand); //理所当然我们想到要用数组装入更多随机数
int[] randArray = new int[10];
for(int i=0;i<randArray.length;i++)
{
//随机数赋值到数组的每一位
randArray[i]=rand;
}
for(int x:randArray)
{
//输出 但注意:结果的数据int虽然每次运行不同,为随机产生,
//但数组的每一位都是这一个数.也就是说,该数组的每一位,都
//只是赋值了这一个随机数.是相同的.
System.out.print(x+" ");
} //think:那什么办法生产随机的数到数组中呢?生成随机数组?
//方法1,蠢的办法:声明多个rand.(rand1,rand2,rand3)
int rand1 = (int)(Math.random()*99);
int rand2 = (int)(Math.random()*99);
int rand3 = (int)(Math.random()*99);
//此输出确实不相同,将rand1,2,3分别赋值到数组的0,1,2位置上,
//但是该方法蠢到不能再蠢.
System.out.println("\n"+rand1+" "+rand2+" "+rand3);
int rand4 = (int)(Math.random()*99); //在随机的生产中,除了Math还有Random的声明:
Random rand_1 = new Random();
//new Random()方法产生的是伪随机数
System.out.println(rand_1);
//这样输出↑只是输出的该对象而不是数字,输出数字使用方法:
System.out.println(rand_1.nextInt(10));
//↑该方法输出了范围[0,9]的随机数 //那么用该方法赋值随机数组:
for(int i=0;i<randArray.length;i++)
{
//随机数赋值到数组的每一位
//nextInt(范围) 为[0,99]范围内的随机数
randArray[i]=rand_1.nextInt(100);
}
for(int x:randArray)
{
System.out.print(x+" ");
} }
}

帮助大家理解java中的随机和继承,动态绑定.的更多相关文章

  1. 深入理解Java中的IO

    深入理解Java中的IO 引言:     对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java >   本文的目录视图如下: ...

  2. 理解Java中的弱引用(Weak Reference)

    本篇文章尝试从What.Why.How这三个角度来探索Java中的弱引用,理解Java中弱引用的定义.基本使用场景和使用方法.由于个人水平有限,叙述中难免存在不准确或是不清晰的地方,希望大家可以指出, ...

  3. 深入理解Java中的继承

    对于面向对象的程序设计而言,每一个程序员都应该去了解Java中的封装,继承和多态,那么我今天来说的主要是以继承为核心的主题. 一.关于对继承的理解. 继承是面向对象的三大特性之一,是java中实现代码 ...

  4. 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因

    声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...

  5. [译]线程生命周期-理解Java中的线程状态

    线程生命周期-理解Java中的线程状态 在多线程编程环境下,理解线程生命周期和线程状态非常重要. 在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类 ...

  6. 深入理解Java中的不可变对象

    深入理解Java中的不可变对象 不可变对象想必大部分朋友都不陌生,大家在平时写代码的过程中100%会使用到不可变对象,比如最常见的String对象.包装器对象等,那么到底为何Java语言要这么设计,真 ...

  7. 理解Java中的ThreadLocal

    提到ThreadLocal,有些Android或者Java程序员可能有所陌生,可能会提出种种问题,它是做什么的,是不是和线程有关,怎么使用呢?等等问题,本文将总结一下我对ThreadLocal的理解和 ...

  8. 深入理解Java中配置环境变量

    深入理解Java中配置环境变量 配置的目的: 本来只在安装JDK的bin目下能运行java.exe,javac.exe,jar.exe,javadoc.exe等Java开发工具包命令,我们现在想让在所 ...

  9. 十分钟理解Java中的动态代理

    十分钟理解 Java 中的动态代理   一.概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道 ...

随机推荐

  1. dbms_stats.gather_table_stats详解

     dbms_stats.gather_table_stats 统计表,列,索引的统计信息(包含该表的自身-表的行数.数据块数.行长等信息:   列的分析--列值的重复数.列上的空值.数据在列上的分布情 ...

  2. 【Python虫师】多窗口定位

    <注意>iframe框架 iframe也称作嵌入式框架,嵌入式框架和框架网页类似,它可以把一个网页的框架和内容嵌入在现有的网页中. 框架(framework)是一个基本概念上的结构,用于去 ...

  3. sql server作业管理查看/进程管理查看命令

    一.作业管理 (1) select * from msdb.dbo.sysjobhistory   可以查看作业的历史记录 (2) select * from msdb.dbo.sysjobs   查 ...

  4. 一张图学dockerfile

        Dockerfile是为快速构建docker image而设计的,当你使用dockerbuild 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文 ...

  5. PAT 1028 List Sorting[排序][一般]

    1028 List Sorting (25)(25 分) Excel can sort records according to any column. Now you are supposed to ...

  6. [lr] 直方图

    直方图基础知识 • 直方图的特征和作用 ▪ 直方图的x轴从左到右代表亮度逐渐增加,即从最暗到最亮:y轴代表某个亮度值下颜色像素的多少(密度). ▪ 直方图由红绿蓝三种颜色组成,分别表示红绿蓝通道:其中 ...

  7. typed.js

    实现效果,文字逐个输出. 实例代码: <script> $(function(){ $("#head-title").typed({ strings: ["为 ...

  8. 论文笔记之《Event Extraction via Dynamic Multi-Pooling Convolutional Neural Network》

    1. 文章内容概述 本人精读了事件抽取领域的经典论文<Event Extraction via Dynamic Multi-Pooling Convolutional Neural Networ ...

  9. C/C++之内存分配

    一.编译时与运行时的内存情况1.编译时不分配内存编译时是不分配内存的.此时只是根据声明时的类型进行占位,到以后程序执行时分配内存才会正确.所以声明是给编译器看的,聪明的编译器能根据声明帮你识别错误.2 ...

  10. RabbitMQ详解(一)------简介与安装(Docker)

    RABBITMQ详解(一)------简介与安装(DOCKER) 刚刚进入实习,在学习过程中没有接触过MQ,RabbitMQ 这个消息中间件,正好公司最近的项目中有用到,学习了解一下. 首先什么是MQ ...