簡體   English   中英

使用math.random(不是java.util.random / nextInt)將對象拉出數組?

[英]Using math.random (not java.util.random/nextInt) to pull object out of an array?

我試圖為一個項目從數組中隨機抽取一個對象,但是我必須使用Math.Random,但不確定如何。 使用java.util.random和nextInt可以很好地完成工作,但是我不能使用它們。 我已經看到了有關math.random這類問題的其他答案,但大多數答案是從數組中拉出隨機對象的索引,而不是對象本身。

這是我的課程:(現在,我在循環中有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;
}

    }

}

我想您可以使用類似以下的內容。

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

然后獲得長度為n> 0的數組arr的索引:

arr[getRandom(n - 1)]

嘗試更改:

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]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM