今日偶遇一局部变量声明的问题,望达人指教~:
         public void directInsertMethod(int[] source) {
for (int i=1;i<source.length;i++){
if (source[i]<source[i-1])
int temp=source[i];//此处为何不能声明变量
}

}
附错误提示:“?"Multiple ers at this line
    - Syntax error on token "int", delete this token
    - temp cannot be resolved"
        ”

解决方案 »

  1.   

    要声明在FOR循环外。你声明在里面 那不是会导致多次声明同一个名字的变量了?
      

  2.   

    if后台将int temp这行加上{}就没错。如果不加,因为if后只能有一行代码,这里就不能定义变量了(因为定义了也没有代码能用到这个变量),如果temp是在if之间定义的,那就没有问题。
    这是编译器的检查机制。
      

  3.   

    分开写public void directInsertMethod(int[] source) { 
    for (int i=1;i <source.length;i++){ 
    if (source[i] <source[i-1]){
    int temp;//此处为何不能声明变量
    temp==source[i];

    } } 
      

  4.   

    哪里有多次声明temp啊??我知道就算声明了那个变量也是没用到,只是想问为什么不能声明,编译器有检查这种垃圾变量?比如我声明了一个变量但是从不去读他不也只是警告而已吗?
      

  5.   

    囧~~~FOR里还有IF啊 少看了……
      

  6.   


        public void directInsertMethod(int[] source) {
            for (int i = 1; i < source.length; i++) {
                if (source[i] < source[i - 1]) {
                    int temp = source[i];
                }
            }    }这样就不会报错了 顶多警告下 这个变量没被使用。
      

  7.   

    一般情况下声明了个变量没用到是允许的,因为你还可以在声明之后添加代码,所以只是警告以提醒你去处理。
    而你这种情况if后面只能有一行代码,这样没有用的代码就不允许了。
    还有象在return后面加代码也是一样的。
      

  8.   

    了解了,知道这是不合理的,但是以前不知道有这种控制~,也是偶然发现。“14楼兄弟FOR里面有IF”是很奇怪的事吗??