【问题标题】:How To Randomly Generate From A Given List?如何从给定列表中随机生成?
【发布时间】:2012-09-14 23:49:53
【问题描述】:

我遇到的问题是从特定列表中随机生成名称。我希望我的程序只能从以下名称中进行选择:Bob、Jill、TomBrandon。我尝试研究数组,但我认为这对我来说有点太远了。到目前为止,我想我有一个大概的想法,但我不确定。

import java.util.Random;

public class NameGenerator
{

        public static void main(String[] args)
        {

           System.out.println("This is a program that generates random names from a list!");

           int Bob = 0;
           int Jill = 0;
           int Tom = 0;
           int Brandon = 0;
           Random r = new Random();

在那之后,我有点纠结于如何让发电机运转。

更新: 好吧,我接受了您的建议并尝试学习数组。到目前为止,这就是我所拥有的。

ArrayList<String> names = new ArrayList<String>();
names.add("Bob");
names.add("Jill");
names.add("Tom");
names.add("Brandon");

char index = randomGenerator.nextChar(names.size());
String anynames = names.get(index);
System.out.println("Your random name is" + anynames + "now!");

但是现在它说 randomGenerator 无法解析并且 void 方法无法返回值。关于我哪里出错的任何想法?

【问题讨论】:

  • 因为这是你自己的练习,如果我给你答案它会“毁掉它”,我会给你一个一般性的提示。将可能的名称列表存储在数组(或列表,或任何容器)中,然后生成随机索引以从列表中选择名称。
  • 数组绝对是你想要的。如果你真的是编程新手,你可能想要一本书或一个好的教程(“30 天自学 Java”的书还不错。如果你是 Java 新手,请点击 Java 教程以加快速度. Borgleader 是对的,帮助会毁了它——打掉它,这是个大问题。
  • @Tominizer randomGenerator 实例化在哪里?提供所有代码以帮助您。

标签: java arrays random arraylist


【解决方案1】:
import java.util.*; 

public class characters 
{
    public static void main(String[] args)
    {
       Random generate = new Random();
       String[] name = {"John", "Marcus", "Susan", "Henry"};

       System.out.println("Customer: " + name[generate.nextInt(4)]);      

    }
}

看看这有多容易?我给了 4 个简单的名字,可以用单词等代替。代码中的“4”代表String中名字的个数。这很简单。对于那些想要更短的人(我所做的只是减少间距):

import java.util.*; 
public class characters{ 
public static void main(String[] args){
Random generate = new Random(); 
String[] name = {"John", "Marcus", "Susan", "Henry"};
System.out.println("Customer: " + name[generate.nextInt(4)]); }}

【讨论】:

    【解决方案2】:

    您可以打乱ArrayList 并获取第一个元素,或者迭代并以不同的顺序获取所有元素。

    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;
    
    public class NameGenerator {
        public static void main(String[] args) {
            String[] peoples = {"Bob","Jill","Tom","Brandon"};
            List<String> names = Arrays.asList(peoples);
            Collections.shuffle(names);
            for (String name : names) {
                System.out.print(name + " ");
            }
        }
    }
    

    否则您可以每次创建一个随机数并取不同的名称。

            int index = new Random().nextInt(names.size());
            String anynames = names.get(index);
            System.out.println("Your random name is" + anynames + "now!");
    

    【讨论】:

      【解决方案3】:

      你可以用更少的行来表达它:

      String[] names = {"Bob", "Jill", "Tom", "Brandon"};
      int index = Math.random() * names.length;
      String name = names[index];
      System.out.println("Your random name is" + name + "now!");
      

      【讨论】:

        【解决方案4】:
        import java.util.*;
        import java.io.*;
        
        public class Main {
          public static void main(String[] args) throws Exception {
        
            // To generate random information
            Random random = new Random(); // necessary for this project
        
            // To get the names and surnames .txt files in local directory
            Scanner male = new Scanner(
                new File("/storage/emulated/0/Download/male.txt")); // male names .txt
        
            Scanner female = new Scanner(
                new File("/storage/emulated/0/Download/female.txt")); // female names .txt
        
            Scanner surname = new Scanner(
                new File("/storage/emulated/0/Download/surnames.txt")); // surname lists .txt
        
        
            // Each name and surname will be stored here for easier use
            LinkedList<String> maleNames = new LinkedList<String>(); // male names
            LinkedList<String> femaleNames = new LinkedList<String>(); // female names
            LinkedList<String> surnameLists = new LinkedList<String>(); // surname lists
        
            // Loops are used to automatically store each name and surname into the list
            while (male.hasNext()) {
                maleNames.add(male.next()); // auto store each male name into the list
            }
            while (female.hasNext()) {
                femaleNames.add(female.next()); // auto store each female name into the list
            }
            while (surname.hasNext()) {
                surnameLists.add(surname.next()); // auto store each surname into the list
            }
        
            // Sorting Elements is optional
            surnameLists.sort(Comparator.naturalOrder()); // optional
            femaleNames.sort(Comparator.naturalOrder()); // optional
            maleNames.sort(Comparator.naturalOrder()); // optional
        
            // Closing these objects is necessary
            surname.close(); // necessary
            female.close(); // necessary
            male.close(); // necessary
        
        
            // For loop is used to generate multiple information
            for (int index = 0; index < 10000; index++) { // optional
        
                String firstName = "", lastName = "", completeName = "", gender = ""; // temporary storage
        
                byte age = (byte)(random.nextInt(99 - 18 + 1) + 18); // generates random age between 18 to 99 years old
        
                // If boolean value is true, it is male
                if (random.nextBoolean()) {
                    firstName += maleNames.get(random.nextInt(maleNames.size())); // generates random name
                    lastName += surnameLists.get(random.nextInt(surnameLists.size())); // generates random surname
        
                    firstName = (firstName.substring(0, 1).toUpperCase() + firstName.substring(1)); // uppercase first letter
                    lastName = (lastName.substring(0, 1).toUpperCase() + lastName.substring(1)); // uppercase first letter
        
                    completeName = firstName + " " + lastName; // creates a complete name
                    gender = "Male"; // sets the gender into male
        
                    // Otherwise, it is female
                } else {
                    firstName += femaleNames.get(random.nextInt(femaleNames.size())); // generates random name
                    lastName += surnameLists.get(random.nextInt(surnameLists.size())); // generates random surname
        
                    firstName = (firstName.substring(0, 1).toUpperCase() + firstName.substring(1)); // uppercase first letter
                    lastName = (lastName.substring(0, 1).toUpperCase() + lastName.substring(1)); // uppercase first letter
        
                    completeName = firstName + " " + lastName; // creates a complete name
                    gender = "Female"; // sets the gender into female
                }
        
                // Finally, printing out the results
                System.out.printf("Name: %s%nAge:  %d%nSex:  %s%n%n", completeName, age, gender);
            }
          }
        }
        

        【讨论】:

          【解决方案5】:

          一个小提示 - Random r = new Random 创建了一个新的“随机”实例。由于您使用的是 Eclipse,因此您将拥有 AutoComplete。声明 Random "r" 实例后,如果您使用 r.&lt;somemethod&gt;,您可能会发现一些有用的东西。

          此外,如果您将“名称”存储在一个数组中,您可以通过一种相当简单的方式访问它们。剩下的就交给你了。

          良好的编码:)

          【讨论】:

            【解决方案6】:
            public static void main(String[] args) {
                String[] peoples = {"Bob", "Jill", "Tom", "Brandon"};
                List<String> names = Arrays.asList(peoples);
                int index = new Random().nextInt(names.size());
                String name = names.get(index);
                System.out.print(name+ " ");
            

            【讨论】:

              猜你喜欢
              • 2023-02-04
              • 2016-04-11
              • 2010-11-17
              • 2011-04-03
              • 1970-01-01
              • 1970-01-01
              • 2016-08-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多