java - java - 如何使用else-if语句在java中编写随机组生成器?
问题描述
我必须编写一个程序,允许用户在两个任务之间进行选择:一个随机组生成器,以及一个逐字解析和计算输入句子的任务。我真的很困惑如何去做。说明如下: Team Maker:如果输入 1,应用程序会提示用户输入所需的团队数量。如果输入 0,则什么也不会发生,应用程序会继续提示用户输入 1 或 2。见图 3。如果团队数量为 1 或更多,则应用程序会显示团队编号,从 1 开始,后跟从 COP2510.txt 中提供的 49 名学生中随机选择的三个全名。另请参见图 3,其中输入 1 和 3 分别表示组成一队和三队。提示:使用在 GetRandom1.java 或 Quiz 3 的 GR.zip 中看到的 Random 类来实现这个随机选择。
每个团队的所有名称都必须以“标签”开头。在此应用程序中非常重要的是,没有学生会多次出现在相同或不同的团队中。提示:将随机数(整数)“映射”到特定学生姓名的方法不止一种。使用 if....else if....else if....else if.... 是一种可能的方法,在这里推荐。将所有名称存储在数组中是另一种方式,但直到第 10 章才介绍。计算字数:如果输入 2,应用程序会提示用户输入一个或多个句子。参见图 4。该应用程序使用空格字符“”来分隔和计算输入中的单词。如果有两个或多个连续空格,则将它们视为一个。即“AA BB”和“AA BB”都包含两个词。参见图 5。输入中的所有前导和尾随空格都将被忽略。提示:使用 String 的 'trim()' 方法。该应用程序显示两行破折号,即“------”以将它找到的每个单词括起来。每个单词必须连同它的长度一起显示。例如,如果“嗨,约翰!” 输入后,破折号之间的两行应该是“Hi, (3)”和“John!(5)”。在第二条虚线之后,显示结束任务的总字数。如果未输入任何单词或句子,则会显示“无或仅输入空格”的消息。显示在两条虚线之间,并且计数为零。请参见图 5 中的最后一个输入。提示:您可以使用 String 的 trim()、indexOf()、length()、substring() 和 equals() 方法来实现上述字数统计任务。即使使用相同的方法,
我得到了程序欢迎用户的第一部分,并展示了程序的作用。但是我不知道如何编写随机团队生成器。我只能使用 else if 语句。有人告诉我为每个名称分配一个随机数,然后使用 else if 语句,但是我不知道该怎么做。至于计数器这个词,我不知道。如果有人可以提供帮助,那就太好了。
import java.util.Scanner;
import java.util.Random;
public class asssignment3 {
public static void main (String args[]){
Scanner sc = new Scanner(System.in);
//print out a task prompt
System.out.println("Assignment-3 can perform the following two task:");
System.out.println();
System.out.println("\t1-Making 3-member tems from class of COP2510");
System.out.println("\t2-Parsing and counting an input sentence by word");
System.out.println();
System.out.print("Enter 1 or 2 to begin your task or anything else to quit: ");
String choiceNumber = sc.nextLine ();
if (choiceNumber.equalsIgnoreCase("0")) {
System.out.println("Enter 1 or 2 to begin your task or anything else to quit: ");
String optionNumber = sc.nextLine ();
}
Random r = new Random();
if (choiceNumber.equalsIgnoreCase ("1")) {
String studentName = "";`
解决方案
就个人而言,我会放弃 if-else 并做数组。用从 0 到 N 的每个整数组成一个数组,其中 N 是学生人数。然后,随机播放列表。我相信 Java 有一个预构建的函数,但如果不是,那么它的算法是微不足道的。
从那里,只需逐行读取学生文件并从混洗数组中分配相应的数字。示例伪代码:
# >>> Generate the list of numbers of shuffle it. <<< #
N = number of students
numbers = [i for i in range(N)]
random.shuffle(numbers)
# >>> Initialize a list to store number-student pair <<< #
students = []
# >>> Read in the student file line by line <<< #
for line in students.txt:
randomNumber = numbers.pop()
students.append((line, randomNumber))
Viola,students
列表现在包含所有学生,并与一个随机数字配对。
至于计算单词,通过 trim() 然后 split() 运行输入。
# >>> Removes whitespace before and after the string (" A " -> "A") <<< #
input = input.trim()
# >>> Splits input into an array ("AA BB CC" -> ["AA", "BB", "CC"]) <<< #
words = input.split(" ")
numWords = word.length
推荐阅读
- java - 在Android中摆脱半个字符串
- netsuite - 无法从 netsuite 中保存的搜索中检索自定义列表值
- bash - 用 AWK 替换一批文本文件中的值,并从最后一个值递增后续值
- html - 如何添加元属性=“og:locale”内容=“?”
- .htaccess - htaccess 在子域上重写一个 url
- apache-pig - PIg 标量大于 0
- dependency-injection - 依赖/应用范围类的 CDI 失败
- c# - 将 CSV 文件导出到 C#,并在单元格中使用换行符
- python - gremlin-python 在一个事务中删除多个顶点和边
- java - 如何按日期从其超实体类中删除所有子类实体