2014-12-07 206 views
0

我被要求写一个程序,需要5到10之间的数字,并找出其中有多少是偶数,有多少奇数使用自由落体的方法Switch-Case语句。我已经编写了代码,并且我已经在一个本地范围内声明了变量,其中包含相同的开关箱,所以我不认为这是块范围的问题。如果数字是奇数(1,3,5,7,9),则奇数计数器变量(oc)递增。偶数字也是如此。如果数字不在范围内,则打印出“INVALID Entry”(它继续,并且不会中断程序)。偶数整数和奇数整数计数与开关案例

import java.util.*; 

public class Even { 
    public static void main(String[] args){ 
     Scanner sc = new Scanner(System.in); int n= 0; int ec, oc = 0; 
     for (int i = 1; i<=5; i++){ 
      System.out.println("Enter a number"); 
      n = sc.nextInt(); 
      ec= 0; oc = 0; 

      switch(n){ 
       case 1: oc = 0; 
       case 3: 
       case 5: 
       case 7: 
       case 9: oc++; break; 
       // Now Even 
       case 2: ec = 0; 
       case 4: 
       case 6: 
       case 8: 
       case 10: ec++; break; 

       default: System.out.print("Invalid Entry"); 
      } 
     } 
     System.out.println("Total number of even integers: " + ec + " and odd integers " + oc); 
    } 
} 

的问题是,它给人的错误:在这一行“EC可能尚未初始化”在节目的结尾:“的System.out.println(”偶数总数:“+ ec +“和奇数整数”+ oc);“。

为什么会导致此错误?这怎么解决?对不起,如果这看起来很愚蠢,我是一个新手,我的意图是学习。非常感谢!

回答

0

近,你有这条线的顶部 -

Scanner sc = new Scanner(System.in); int n= 0; int ec, oc = 0; 

变化int ecint ec=0

Scanner sc = new Scanner(System.in); int n= 0; int ec=0, oc = 0; 

此外,你应该在单独的行中的所有语句 -

Scanner sc = new Scanner(System.in); 
int n= 0; 
int ec, oc = 0; 
0

之前for循环,初始化变量ec

Scanner sc = new Scanner(System.in); 
int n= 0; 
int ec = 0, oc = 0; 
0

编译器要求的局部变量初始化,使其不小心尝试读取未明确赋值。

虽然在循环中赋值,但编译器在System.out.println所在的作用域中找不到初始化,所以仍然抱怨。只需在您声明的位置初始化变量ec即可。

0

原因是ecfor循环内初始化,从编译器的角度来看,它永远不会被执行。在声明int ec, oc = 0;中,只有oc0初始化。