当前位置: 首页 > 知识库问答 >
问题:

使用数组的字符串的随机组合

卫甫
2023-03-14

我想知道如何组合用户输入的两个随机html" target="_blank">字符串。这个程序有点像一个疯狂的Libs游戏,但它是用来创作一首诗的。我首先要求用户输入要使用的名词的数量,然后将它们存储到一个数组中,然后询问形容词的数量,这些形容词也存储在一个数组中。

确切的问题如下:

通过随机选择名词和形容词的组合来创作你的诗歌。在分别使用用户提供的所有名词和形容词之前,不允许再次选择名词或形容词。

现在我被要求通过组合输入的名词和形容词来生成一首诗,但生成器需要是随机的。我该怎么做?到目前为止,我的计划如下:

import java.util.Scanner;
public class A3Question1 
{

public static void main(String[] args) 
{
    Scanner keyboard = new Scanner(System.in);
    boolean loop1 = false;
    boolean loop2 = false;
    boolean loop3 = false;
    int numNouns = 0, numAdjectives = 0;
    String[] nouns = new String[numNouns];
    String[] adjectives = new String[numAdjectives];

    System.out.println("-----------------------------------------");
    System.out.println("           Let's write a poem!           ");
    System.out.println("-----------------------------------------");
    System.out.println();

    while (!loop1)
    {
        System.out.print("How many nouns? (min 3): ");
        numNouns = keyboard.nextInt();

        if (numNouns < 3)
        {
            continue;
        }
        else
        {
            loop1 = true;
        }

        System.out.println("Enter " + numNouns + " nouns: ");
        nouns = new String[numNouns];

        for (int i = 0; i < numNouns; i++)
        {
            nouns[i] = keyboard.next();
        }
    }
    while (!loop2)
    {
        System.out.print("How many adjectives? (min 3): ");
        numAdjectives = keyboard.nextInt();

        if (numAdjectives < 3)
        {
            continue;
        }
        else
        {
            loop2 = true;
        }

        System.out.println("Enter " + numAdjectives + " adjectives: ");
        adjectives = new String[numAdjectives];

        for (int j = 0; j < numAdjectives; j++)
        {
            adjectives[j] = keyboard.next();
        }

        while (!loop3)
        {
            System.out.println("\n-----------------------------------");
            System.out.println("        Here is my Java Poem!         ");
            System.out.println("           **LOOK AROUND**            ");
            System.out.println("-----------------------------------");
            System.out.println();

            for (int i = 0; i < numNouns && i < numAdjectives; i++)
            {                   
                int num1 = (int) (Math.random() * numNouns); 
                int num2 = (int) (Math.random() * numAdjectives);
                System.out.println(nouns[num1] + adjectives[num2]);
            }

            System.out.println("\nAnother poem? (y/n): ");
            String again = keyboard.next();

            if (again.charAt(0) == 121 || again.charAt(0) == 89)
            {
                continue;
            }
            else
            {
                loop3 = true;
            }
        }

        System.out.println("Thank you for using POEM GENERATOR! Have a good day!");         
    }       
    keyboard.close();
}

}

样本输出:

https://postimg.org/image/6ogwggw9f/

编辑**:我清理了代码并将数组随机组合在一起。然而,生成的随机数组不能再次重用,我正在试图找出如何避免这个问题。我还需要适当缩进这首诗,如图所示。例如,第一个输出没有空间,第二个输出有一个选项卡,第三个输出有两个选项卡。

共有2个答案

公西志文
2023-03-14

你必须随机化数组。一个简单的方法是选择数组中的任何两个元素并相互交换。这样做足够多的次数,你就会得到一个随机数组。

这是样本

package com.example;

import java.util.Random;

public class RandomTest {
    public static void main(String[] args) {
        String[] nouns = {"roses", "tulips", "grass"};
        shuffle(nouns, 50);
        String[] adjectives = {"red", "lovely", "gorgeous", "green"};
        shuffle(adjectives, 50);

        for(int i = 0; i < nouns.length && i < adjectives.length; i++) {
            System.out.println(adjectives[i] + " " + nouns[i]);
        }
    }

    public static void shuffle(String[] list, int swapCount) {
        Random random = new Random();
        for(int i = 0; i < swapCount; i++) {
            int index1 = random.nextInt(list.length);
            int index2 = random.nextInt(list.length);

            //Swap these two with each other
            String temp = list[index1];
            list[index1] = list[index2];
            list[index2] = temp;
        }
    }
}

连续运行的输出

lovely tulips
gorgeous roses
red grass

lovely grass
gorgeous tulips
green roses

lovely tulips
red roses
green grass
席银龙
2023-03-14

使用Random对象在数组中选择随机索引。第二个随机可以选择是否应该从名词或形容词数组中选择。

public String randomPoem(String[] nouns, String[] adjectives) {
    Random random = new Random();
    ArrayList<String> nounList = new ArrayList<>(Arrays.asList(nouns));
    ArrayList<String> adjList = new ArrayList<>(Arrays.asList(adjectives));
    String value = "";
    if (random.nextBoolean()) {
        int index = random.nextInt(nounList.size());
        value += nounList.remove(index);
    } else {
        int index = random.nextInt(adjList.size());
        value +=  adjList.remove(index);
    }
    return value;
}
 类似资料:
  • 问题内容: 我有阵列中的国家/地区列表,我想从列表中选择一个国家/地区(可能是使用随机的?),但是我自己还没有找到答案… 这是我到目前为止所拥有的: 问题答案: 尝试:

  • 问题内容: 我有一个字符串数组: 我从中得到随机元素: 现在我想获得当我按下按钮以获取随机水果时苹果所处的数字,例如当我按下randon按钮时,它给了我Banana ..并且还应该给我那个元素编号是 我得到了元素,但是获取元素编号有问题,所以请帮帮我 问题答案: 只需将生成的索引存储在变量中,然后使用此变量访问数组: PS我通常不喜欢每次随机化生成新对象-我更喜欢在程序中使用单个对象- 然后重新使

  • 本文向大家介绍js随机生成字母数字组合的字符串 随机动画数字,包括了js随机生成字母数字组合的字符串 随机动画数字的使用技巧和注意事项,需要的朋友参考一下 js随机动画生成一组随机数字 在线预览 点击下载 效果描述: 附件中只有一个index.html文件有效 其中包含css以及html两部分内容 纯js生成的几个随机数字 每次都不重复,点击按钮后再次切换 使用方法: 1、将css样式引入到你的网

  • 本文向大家介绍Java 生成随机字符串数组的实例详解,包括了Java 生成随机字符串数组的实例详解的使用技巧和注意事项,需要的朋友参考一下 Java 生成随机字符串数组的实例详解 利用Collections.sort()方法对泛型为String的List 进行排序。具体要求: 1.创建完List<String>之后,往其中添加十条随机字符串 2.每条字符串的长度为10以内的随机整数 3.每条字符串

  • 嗨,伙计们,我有这个阵列,可以打印5x5 1 我想做的是随机地将这些1中的三(3)个设为0。实例 我该怎么做?提前感谢您!

  • 问题内容: 我想做这样的事情: 这似乎不起作用。最简单的方法是将多个地址(每个地址3个字段)存储在数组中而不为其创建单独的类,这是最简单的方法吗? 问题答案: 对3个字符串使用第二个ArrayList,而不是原始数组。就是 然后您可以拥有: (我认为这里的类型擦除可能会发生一些奇怪的事情,但我认为这并不重要) 如果您对使用原始数组一无所知,则只需进行较小的更改即可使示例工作。如其他答案所述,数组的