2015-07-02 25 views
-2

我试图通过stdin来输入,我想要"t"乘以a,bn的值。但我得到编译错误该变量可能未被初始化变量a,bn为什么我会在for循环中初始化变量时,“变量可能没有初始化变量a,b和n”?

我无法弄清楚我出错的地方。

import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution { 

    public static void main(String[] args) { 
     /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */ 
     int num; 
     Scanner in = new Scanner(System.in); 
     num = in.nextInt();    
     int sol;    
     sol= takken(num); 
     System.out.println(sol); 
    } 

    public static int takken(int howManyTimes){ 
     int a, b, n; 
     int x; 
     int solution = 0; 
     Scanner d = new Scanner(System.in); 
     int y = 4; 
     for(int j = 0; j< y; j++) 
     { 
      a = d.nextInt(); 
      b = d.nextInt(); 
      n = d.nextInt(); 
     } 
     solution = a; 
     int temp = 0; 

     for (int i = 0; i < n; i++){ 
      x = (int) Math.pow(2,i); 
      temp = x * b; 

      solution = solution + temp; 
     } 
     return solution; 
    } 
} 

回答

3

只要改变你的a声明,bn到:

int a = 0, b = 0, n = 0; 

Java编译器不能告诉你在for循环初始化这些变量,因为你正在经历的换循环可变次数(该数字是变量y)。

尽管您声明y的值为4正好在for循环之上,我们可以看到这意味着您的变量总是会得到一个值,这是Java编译器无法看到的。

Java编译器在检查某些内容是否肯定已经初始化时遵循了一些严格的规则;如果你在迭代了多次的循环中对它们进行初始化,即使之前设置了这个变量,Java仍然看不到它。

+0

你是对的。删除我的评论... – Alexander