在switch语句中初始化新文件

时间:2014-05-10 20:43:47

标签: java file-io initialization switch-statement

我遇到文件启动问题。基本上,我希望我的问题随机选择一个文件。这是我目前的代码:

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(),但显然这不起作用。有什么建议吗?

4 个答案:

答案 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也不是2choice将保持未初始化状态。您需要确保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;
      }