黑马程序员技术交流社区
标题:
提示变量未定义
[打印本页]
作者:
黑马连家华
时间:
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