使用math.random(而不是java.util.random / nextInt)将对象拉出数组?

时间:2017-05-14 22:57:26

标签: java arrays object random

我正在尝试从项目中随机拉出一个对象,但是我必须使用Math.Random并且我不确定如何。使用java.util.random和nextInt可以很好地完成工作,但我无法使用它们。 我已经在math.random中看到了这类问题的其他答案,但是大多数都是从数组中提取随机对象的索引,而不是对象本身。

这是我的班级: (现在我在循环中有随机和nextInt只是为了展示它应该如何工作,但我需要从Math.random得到完全相同的结果)

import java.util.Scanner;
import java.util.Random;
public class Madlibsdriver 
{
    static Scanner scan= new Scanner (System.in);
    public static void main(String[] args) 
    {


    System.out.print ("Welcome to Mad libs!");
    System.out.println();
    System.out.println("----------------------------------------------");
    System.out.println("Enter a noun:");
        String ip1= scan.nextLine();
    System.out.println("Enter an adjective:");
        String ip2= scan.nextLine();
    System.out.println ("Enter a verb:");
        String ip3= scan.nextLine();
    System.out.println ("Enter an adverb (ex: angrily) :");
        String ip4= scan.nextLine();
    System.out.println ("Enter another noun:");
        String ip5= scan.nextLine();

    Phrase obama= new Obama(ip1, ip2, ip3, ip4, ip5);
    Phrase shake= new Shakespeare (ip1, ip2, ip3, ip4, ip5);
    Phrase horror= new Horror (ip1, ip2, ip3, ip4, ip5);
    Phrase mystery= new Mystery (ip1, ip2, ip3, ip4, ip5);
    Phrase romance= new Romance (ip1, ip2, ip3, ip4, ip5);

    Phrase[]libs= new Phrase [5];
    libs[0]= obama;
    libs[1]= shake;
    libs[2]= hooror;
    libs[3]= mystery;
    libs[4]= romance;

    System.out.println("Press 1 to generate a mad lib or 2 to exit.");
    int begin= scan.nextInt();

    while ((ip1.length()>0)&& begin==1)
{
        Random rand = new Random();
        System.out.println();
        System.out.println ( libs[rand.nextInt(libs.length)]);
        System.out.println("---------------------------------------");
        System.out.print ("To play again, press 1. To exit, press 2.");
        begin=scan.nextInt();

            if (begin==2) break;
}

    }

}

2 个答案:

答案 0 :(得分:0)

我想你可以使用以下内容。

public static int getRandom(int max) {
  return (int) Math.floor(Math.random() * (max + 1));
}

然后得到长度为n>的数组arr的索引。 0:

arr[getRandom(n - 1)]

答案 1 :(得分:0)

尝试改变:

Random rand = new Random();
    System.out.println();
    System.out.println ( libs[rand.nextInt(libs.length)]);

使用:

int length = libs.length;
    double val = length * Math.random();
    System.out.println();
    System.out.println ( libs[(int) val]);