• 随机数的生成,静态导入,可变参数的方法,方法重载,浮点数的比较


    一,随机数产生方法

    ①最小值+Math.random() *(最大值-最小值+1):产生的数的范围在   [最小值,最大值] 

    package com.java1;
    import javax.swing.JOptionPane;

    public class RandomInt {
    public static void main( String args[] )
    {
    int value;
    String output = "";

    for ( int i = 1; i <= 20; i++ ) {
    value = (int) ( 1+Math.random() * 6 );
    output += value + " ";

    if ( i % 5 == 0 )
    output += " ";
    }

    JOptionPane.showMessageDialog( null, output,
    "20 Random Numbers from 1 to 6",
    JOptionPane.INFORMATION_MESSAGE );

    System.exit( 0 );
    }
    }

    产生的随机数的范围在1-6之间

     ②利用new Random().nextInt(26)的方法来实现输出一个大于等于0,小于26的随机数

     

    package com.java1;
    import java.util.Random;

    public class TestSeed
    {
    public static void main(String[] args)
    {
    Random r1 = new Random(50);
    System.out.println("第一个种子为50的Random对象");
    System.out.println("r1.nextBoolean(): " + r1.nextBoolean());
    System.out.println("r1.nextInt(): " + r1.nextInt());
    System.out.println("r1.nextDouble(): " + r1.nextDouble());
    System.out.println("r1.nextGaussian(): " + r1.nextGaussian());
    System.out.println("---------------------------");

    Random r2 = new Random(50);
    System.out.println("第二个种子为50的Random对象");
    System.out.println("r2.nextBoolean(): " + r2.nextBoolean());
    System.out.println("r2.nextInt(): " + r2.nextInt());
    System.out.println("r2.nextDouble(): " + r2.nextDouble());
    System.out.println("r2.nextGaussian(): " + r2.nextGaussian());
    System.out.println("---------------------------");

    Random r3 = new Random(100);
    System.out.println("种子为100的Random对象");
    System.out.println("r3.nextBoolean(): " + r3.nextBoolean());
    System.out.println("r3.nextInt(): " + r3.nextInt());
    System.out.println("r3.nextDouble(): " + r3.nextDouble());
    System.out.println("r3.nextGaussian(): " + r3.nextGaussian());


    Random r4 = new Random(System.currentTimeMillis());
    System.out.println("以当前时间为种子的Random对象");
    System.out.println("r3.nextBoolean(): " + r4.nextBoolean());
    System.out.println("r3.nextInt(): " + r4.nextInt());
    System.out.println("r3.nextDouble(): " + r4.nextDouble());
    System.out.println("r3.nextGaussian(): " + r4.nextGaussian());
    }
    }

    Answer:

    rand.nextBoolean():true
    [103, -90, -76, 58, -91, -52, -23, 45, 50, 73, -43, 70, 77, -64, -48, -122]
    rand.nextDouble():0.1631898380376655
    rand.nextFloat():0.1340416
    rand.nextGaussian():-1.8408133377651577
    rand.nextInt():-382427923
    rand.nextInt(26):3
    rand.nextLong():-1029091829791802274

    ③通过不同的种子来产生Random对象,和以当前时间为种子来产生Random对象

     

    package com.randseed;
    import java.lang.*;
    import java.util.Scanner;
    public class randseed {
    public static void rand(long x)
    {
    long a;
    for(int i=1;i<=1000;i++)
    {
    a=(x*16807)%Integer.MAX_VALUE;//由公式得
    System.out.println(a);
    x=a;
    }
    }

    public static void main(String[] args) {
    Scanner in=new Scanner(System.in);
    System.out.println("请输入种子数:");
    long seed;
    seed=in.nextLong();
    rand(seed);
    }
    }

    输出:

    第一个种子为50的Random对象
    r1.nextBoolean(): true
    r1.nextInt(): -1727040520
    r1.nextDouble(): 0.6141579720626675
    r1.nextGaussian(): 2.377650302287946
    ---------------------------
    第二个种子为50的Random对象
    r2.nextBoolean(): true
    r2.nextInt(): -1727040520
    r2.nextDouble(): 0.6141579720626675
    r2.nextGaussian(): 2.377650302287946
    ---------------------------
    种子为100的Random对象
    r3.nextBoolean(): true
    r3.nextInt(): -1139614796
    r3.nextDouble(): 0.19497605734770518
    r3.nextGaussian(): 0.6762208162903859
    以当前时间为种子的Random对象
    r3.nextBoolean(): true
    r3.nextInt(): 1678327555
    r3.nextDouble(): 0.16760365386964127
    r3.nextGaussian(): -0.7219839638959297

    由结果我们可以知道:相同的种子产生的随机数是相同的,以当前时间为种子产生的随机数一定是独一无二的。

    ④手写代码来实现1000个随机数

    根据公式:

     其中Xn=输入的种子数

    c=0;  a=75=16807;  m=Integer.MAX_VALUE;

     

    package com.java1;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;


    public class VariableArgumentsTest{

    public static double max(double...values)
    {
    double largest=Double.MIN_VALUE;
    for (double v:values)
    if(v>largest) largest=v;
    return largest;
    }

    public static void main(String args[]) {

    System.out.println("Max:"+max(1,11,300,2,3,50,1500,2010,2019));

    }
    }

     

    输出1000个随机数。

    二,静态导入

    通过静态导入就不用再调用:类名.方法名,而是转换成直接使用方法名进行调用。

    下面给出三种方式来解决abs绝对值的问题

    package com.randseed;
    import static java.lang.Math.*;
    public class importstatic {

    public static void Abs(int a)
    {
    if(a<0)
    a=-a;
    System.out.println(a);
    }

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println(abs(-100));//已经静态导入,故可以直接使用方法
    System.out.println(Math.abs(-100));//数学函数本生就是静态的方法
    Abs(-100);//自定义一个静态的方法
    }
    //三者结果都是相同的
    }

     
     

    三者输出结果都是:100

    三,可变参数的方法

    利用可变参数的方法来计算传入的参数中最大值.

    package com.java1;
    public class MethodOverload {

    public static void main(String[] args) {
    System.out.println("The square of integer 7 is " + square(7));
    System.out.println(" The square of double 7.5 is " + square(7.5));
    }

    public static int square(int x) {
    return x * x;
    }

    public static double square(double y) {
    return y * y;
    }
    }

    输出为:2019

     四,方法重载的要点

    重载关系的条件:

    ①方法名相同

    ②参数类型不同,参数个数不同,参数顺序不同

    注意:方法的返回值不能作为判断的依据

     

    package com.java1;
    public class MethodOverload {

    public static void main(String[] args) {
    System.out.println("The square of integer 7 is " + square(7));
    System.out.println(" The square of double 7.5 is " + square(7.5));
    }

    public static int square(int x) {
    return x * x;
    }

    public static double square(double y) {
    return y * y;
    }
    }

    上述代码中:有两个square方法,但其参数类型不同,故而在调用时就会选择不同的方法名进行运算,

    输出:

    The square of integer 7 is 49

    The square of double 7.5 is 56.25

    五,浮点数的比较

    在日常计算中难免会用到浮点数的比较,然而在浮点数之间的比较中能直接用==吗?

    答案:否

    不能直接用==来判断两个浮点数的值,而应该使用两数相减的绝对值小于一个极小的数,则两数相等。

    package com.java1;


    public class CompareFloatNumber {

    /**
    * @param args
    */
    public static void main(String[] args) {
    compare();
    compare2();

    }

    private static void compare() {
    double i = 0.0001;
    double j = 0.00010000000000000001;
    System.out.println(i==j); //输出:true
    }
    private static void compare2() {
    double i = 0.0001;
    double j = 0.000100000000600000001;
    if(Math.abs(i-j)<1e-20){
    System.out.println("true");
    }
    else
    {
    System.out.println("false");
    }

    }

    }

    输出:

    true

    false

    因此,我们不能向比较整型一样来比较浮点数。

  • 相关阅读:
    js replace替换 忽略大小写问题
    Spring security实现国际化问题
    Mac 的mysql5.7没有配置文件,如何解决only_full_group_by 问题
    java设计模式学习
    synchronized的锁问题
    理解java的三种代理模式
    [acm]HDOJ 2059 龟兔赛跑
    [acm]HDOJ 2673 shǎ崽 OrOrOrOrz
    [acm]HDOJ 1200 To and Fro
    [acm]HDOJ 2064 汉诺塔III
  • 原文地址:https://www.cnblogs.com/dazhi151/p/13639328.html
Copyright © 2020-2023  润新知