我遇到文件启动问题。基本上,我希望我的问题随机选择一个文件。这是我目前的代码:
public void doFile () throws FileNotFoundException
{
File one = new File ("RJOpening.txt");
File two = new File ("RJBalcony.txt");
File choice;
int n = (int)(Math.random() * 2);
switch (n)
{
case 1: choice = one; break;
case 2: choice = two; break;
default: break;
}
Scanner input = new Scanner (choice);
上面给出了扫描仪输入行的编译错误,说没有初始化变量“choice”。我尝试过File choice = new File(),但显然这不起作用。有什么建议吗?
答案 0 :(得分:1)
以简单的方式做事
final File choice; // make it final
int n = (int)(Math.random() * 2); // only 0 or 1 as two possible values
if(n == 0){
choice = one;
}else{
choice = two;
}
答案 1 :(得分:1)
编译器会告诉您,如果n
既不是1
也不是2
,choice
将保持未初始化状态。您需要确保random
被限制在两个值的范围内(零和一个是典型值,但如果您愿意,可以使用1和2),还要添加一个赋值null
的默认值。 1}}。它是安全的,因为上面的代码保证永远不会分配null
:
int n = (int)(Math.random() * 100);
switch (n % 2) // Now n is either zero or 1
{
case 0: choice = one; break;
case 1: choice = two; break;
default: choice = null; break;
}
但是,对于只有两个值,这是过度的:if
/ else
就足够了,并且它不会要求您提供无用的default
。< / p>
对于两个以上的值,您最好将文件放入数组中,并随机选择索引,如下所示:
File allFiles[] = new File[] {
new File ("RJOpening.txt"),
new File ("RJBalcony.txt"),
new File ("RJClosing.txt"),
new File ("RJWindow.txt"),
...
};
int n = (int)(Math.random() * allFiles.length);
File choice = allFiles[n % allFiles.length];
答案 2 :(得分:1)
更改为:
switch (n)
{
case 0: choice = one; break;
case 1: choice = two; break;
default: choice = null; break;
}
当时, Math.random()
会在[0,1]中返回一个值
你乘以2,这个间隔变为[0,2),
当你施放到int
时,这会给出0或1。
答案 3 :(得分:1)
而不是尝试提出一个随机数,使用该随机数设置变量的值,并使用该变量打开文件,为什么不放最后一行
Scanner input = new Scanner(choice);
进入switch语句,作为单独的东西?
switch (n)
{
case 1: Scanner input = new Scanner ("RJOpening.txt"); break;
case 2: Scanner input = new Scanner ("RJBalcony.txt"); break;
default: break;
}