黑马程序员技术交流社区

标题: 提示变量未定义 [打印本页]

作者: 黑马连家华    时间: 2012-3-28 16:30
标题: 提示变量未定义
class SearchList
{
        public static void change(int val,int base)//参数依次为:值,进制
                char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                char[] chs2 = new char[8];
                int pos = chs2.length;
                int offset;
                if (base == 16)
                {
                        offset = 4;
                }
                else if (base == 8)
                {
                        offset = 3;
                }
                else if (base == 2)
                {
                        offset = 1;
                }
                else
                        System.out.println("您输入的数值有误");
                while (val != 0)
                {
                        int temp = val & (base - 1);
                        chs2[--pos] = chs[temp];
                        val >>>= offset;
                }
                for (;pos < chs2.length ;pos ++ )
                {
                        System.out.print(chs2[pos]+" ");
                }
        }
        public static void main (String [] args)
        {
                change(60,16);
        }
}

提示offset未定义
本来if我是用switch的,担示offset未定义,改成if还是一样的结果.
请教为什么...
作者: 罗杰    时间: 2012-3-28 16:39
你的offset的赋值在if里 不一定能执行到

第8行 定义的时候初始化一下
int offset = 0;
作者: 王国华    时间: 2012-3-28 16:39
你初始化一下试试, 可能是语法问题
作者: 孙地豪    时间: 2012-3-28 16:42
class SearchList
{
         public static void change(int val,int base)//参数依次为:值,进制
                 char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                 char[] chs2 = new char[8];
                 int pos = chs2.length;
                 int offset;      //  给offset 指定一个初始值
                 if (base == 16)
                 {
                         offset = 4;
                 }
                 else if (base == 8)
                 {
                         offset = 3;
                 }
                 else if (base == 2)
                 {
                         offset = 1;
                 }
                 else
                         System.out.println("您输入的数值有误");
                 while (val != 0)
                 {
                         int temp = val & (base - 1);
                         chs2[--pos] = chs[temp];
                         val >>>= offset;
                 }
                 for (;pos < chs2.length ;pos ++ )
                 {
                         System.out.print(chs2[pos]+" ");
                 }
         }
         public static void main (String [] args)
         {
                 change(60,16);
         }
}
变量定义时可以不赋值。如果是成员变量的话,系统会给他初始化,赋默认值,比如int为0,boolean类型为flase,String类型为null等。
但是如果是方法里面定义的变量,系统不会给他赋值,在调用之前需要明确给他指定一个值。

  
作者: 黑马连家华    时间: 2012-3-28 16:49
孙地豪 发表于 2012-3-28 16:42
class SearchList
{
         public static void change(int val,int base)//参数依次为:值,进制

我还以为是作用域的问题...
作者: 黑马连家华    时间: 2012-3-28 16:50
解决了777777777777777
作者: 田啸    时间: 2012-3-28 16:54
int变量的如果是全局变量的话默认初始值为0,而局部变量无默认初始值,必须赋初值
你可以把int定义成全局变量或者赋初值
val >>>= offset; 在这一句里如果offset如果没有赋初值的话则无法进行位移操作




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2