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. SqlServer 凭据

    一.理解索引的结构 索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度.使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据.微软的SQL SERVER提供了两种索引:聚集索引 ...

  2. android switch控件

    <Switch android:layout_width="wrap_content" android:layout_height="@dimen/minCellH ...

  3. 版本 ------- 2017年最受开发者欢迎的10个Linux发行版

    1.Arch Linux Arch Linux在安装过程中提供了强大的可定制选择,支持你下载和安装自己所需的程序包.虽然这个选择对新手来说没有多大的帮助,但是它确实能够帮助那些使用Arch构建系统和存 ...

  4. [LeetCode] 785. Is Graph Bipartite?_Medium tag: DFS, BFS

    Given an undirected graph, return true if and only if it is bipartite. Recall that a graph is bipart ...

  5. VirtualBox 虚拟磁盘的UUID修改

    个人测试环境,想构建一套Standby RAC环境,不想再重复去安装系统浪费时间,直接复制之前安装RAC前的一套VirtualBox的虚拟环境,不过打开时报错: 未能打开位于 Z:\Vbox\Stan ...

  6. BootStrap的布局学习

    布局组件无数可复用的组件,包括字体图标.下拉菜单.导航.警告框.弹出框等更多功能. Bootstrap的使用非常灵活,可以对各种组件进行合并使用(如:为标签页项 添加带下拉菜单),下面的知识点中将逐个 ...

  7. 读书--编写高质量代码 改善C#程序的157个建议

    最近读了陆敏技写的一本书<<编写高质量代码  改善C#程序的157个建议>>书写的很好.我还看了他的博客http://www.cnblogs.com/luminji . 前面部 ...

  8. BP神经网络的Java实现(转)

    http://fantasticinblur.iteye.com/blog/1465497 课程作业要求实现一个BPNN.这次尝试使用Java实现了一个.现共享之.版权属于大家.关于BPNN的原理,就 ...

  9. hdu5195 二分+线段树+拓扑序

    这题说的给了n个点m条边要求保证是一个有向无环图,可以删除至多k条边使得这个图的拓扑序的字典序最大,我们知道如果我们要排一个点的时候一定要考虑比他大的点是否可以.通过拆边马上拆出来,如果可以拆当然是拆 ...

  10. jq ajax传参的两种方式

    第一种   在url ? 后通过拼接传参   第二种 通过data传参 (1)第一种方法:(通过url传参) function GetQuery(id) { if (id ==1||id==7) { ...