我想允许用户输入一个数字,它将是字符串数(选项)。然后程序将生成一个介于0和数组长度之间的随机数,并显示与随机数的idex匹配的元素。但是每当我运行程序时,输出只是说" null"。我附上了我的代码。任何建议都会有所帮助,谢谢。
import java.util.Scanner;
import java.util.Arrays;
public class Decision{
public static void main (String[] args){
Scanner I= new Scanner(System.in);
System.out.println("How many choices would you like to choose from?");
int i=I.nextInt();
System.out.println("Enter the " + i + " choices:");
Scanner C= new Scanner(System.in);
String c= C.nextLine();
String[] options=new String[i];
int random = (int)(Math.random() * i +1);
String choice = options[random];
System.out.println(choice);
}
}
答案 0 :(得分:0)
您的代码有多个问题:
null
,因为在创建数组String[] options = new String[i];
后,您永远不会为其分配任何字符串,因此所有元素都保留null
。 C.nextLine();
只读取一行并且无论如何都不使用它。 java.util.Arrays
导入。Math.random() * i + 1)
不正确。此修改后的代码可以帮助您:
import java.util.Scanner;
import java.util.Random;
public class Decision {
public static void main (String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("How many choices would you like to choose from?");
// I use an ArrayList, because it may be hand
int count = scanner.nextInt();
String[] choices = new String[count];
// Necessary, because nextInt() does not consume
// the newline character.
scanner.nextLine();
System.out.println("Enter the " + count + " choices:");
for (int i = 0; i < count; i++) {
choices[i] = scanner.nextLine();
}
// The method nextInt(int bound) returns an integer
// in range [0, count - 1].
Random random = new Random();
int randomChoice = random.nextInt(count);
System.out.println(options[randomChoice]);
}
}
为什么Random
比Math.random()
更好的选择已经讨论了in this post,扫描人员和nextInt()
的问题可以找到here。< / p>
答案 1 :(得分:0)
您的代码存在很多问题。
首先,在nextLine
之后调用nextInt
可能会返回""
因为nextInt
没有读取换行符。我建议您将I.nextInt()
替换为Integer.parseInt(I.nextLine())
。
其次,一台扫描仪就足够了。无需创建两个:I
和C
。您还应该适当地命名变量。
第三,如果你想让用户输入一堆东西,你应该使用一个循环。我认为for循环适合这种情况。
最后,我个人不喜欢Math.random()
。这使得很难看出你生成的随机数范围。我建议您使用Random
(请参阅随机数部分)对象。
如果你很懒(我希望你不是),请参阅以下代码:
Scanner scan = new Scanner(System.in);
System.out.println("How many choices would you like to choose from?");
int numberOfChoices = Integer.parseInt(scan.nextLine());
String[] options = new String[numberOfChoices];
for (int i = 0 ; i < numberOfChoices ; i++) {
System.out.println("Enter choice " + (i + 1) + ":");
options[i] = scan.nextLine();
}
Random rand = new Random();
int random = rand.nextInt(numberOfChoices);
String choice = options[random];
System.out.println(choice);