A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马连家华 中级黑马   /  2012-3-28 16:30  /  2765 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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还是一样的结果.
请教为什么...

6 个回复

倒序浏览
你的offset的赋值在if里 不一定能执行到

第8行 定义的时候初始化一下
int offset = 0;
回复 使用道具 举报
你初始化一下试试, 可能是语法问题
回复 使用道具 举报
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:42
class SearchList
{
         public static void change(int val,int base)//参数依次为:值,进制

我还以为是作用域的问题...
回复 使用道具 举报
解决了777777777777777
回复 使用道具 举报
田啸 中级黑马 2012-3-28 16:54:41
7#
int变量的如果是全局变量的话默认初始值为0,而局部变量无默认初始值,必须赋初值
你可以把int定义成全局变量或者赋初值
val >>>= offset; 在这一句里如果offset如果没有赋初值的话则无法进行位移操作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马