解决方案 »
- JSP查询问题!!!!!!!!!!!!
- 怎么判断用户输入的字符串满足yyyy-MM-dd
- 为什么怎么刷新也刷不出来?
- 如何用java分块读取大图片(比如3500px*4800px)????
- SAX2 如何解析保存为UTF-8的XML文件? 比如解析含有中文的XML
- 高手帮我看看错在哪儿了?
- 如何判断JToolBar上有多少个元素(按牛)
- ★★★★★★大好消息! java I love you for ever! sun 胜利了!法官裁定:120天内微软必
- 关于java中的画矩形,详细内容情进
- java中如何实现C++中类似SendMessage的操作?
- 关于数据库的问题
- java 八大原始基本类型 和四个引用类型分别是什么?
2,应该加上break,这样如果找到匹配的,执行流程会跳转至switch主题的末尾应该知道原因了吧!
第一个问题我想可能是因为你要求返回一个对象,但case代表的是可能执行,但并不一定执行,如果case都不执行就会出错,default则默认返回一个null,
你这里使用了return,后面再写break当然是走不到的source,当然会给你提示。都已经return了,后面的东西还怎么走。
如:
int i=2;
switch(i){
case 1:System.out.println("这是1"); break;
case 2:System.out.println("这是2");break;
default:System.out.println("这是default"); break;
}
这样写试试,default一个要写在结尾。
不要在switch的子语句中写 return 如果这样的话,代码不会执行swticth块以后的代码。
如果 这是个函数要个返回值,要的是case中的结果.就 return 然后再加个break;
你让它返回return new Circle();
所以后面的break就不执行了
private Random rand = new Random(47);
Shape next() { //三个case中的Circle、Square、Triangle分别是Shape的派生类
switch(rand.nextInt(3)) {
case 0: return new Circle();
case 1: return new Square();
case 2: return new Triangle();
default: throw new InternalError("Mission Impossible"); // 不可能发生
}
}
}
class RandomShapeGenerator {
private Random rand = new Random(47);
Shape next() {
Shape s;
switch(rand.nextInt(3)) {
default:
case 0: s = new Circle();break;
case 1: s = new Square();break;
case 2: s = new Triangle();break;
default: break;
}
return s;
}
}
这样试试。。
每条语句都要加break,如有特殊要求可以不加,
如果default之前的条件都不匹配就进入default,
不加break会导致switch穿透,SCJP里面有很多相关的题目。
第二:对于return,其实和break在一些方面功能是一样的。
编译器不会理解nextInt() between 0-2,所以,必须让所有分支都有return/throw我的做法类似:
至于为什么不用 break 是因为你有 return
本例中 return 包含了 break 的效果
2.switch分支中已经return跳出方法,当然不需要在加break
rand.nextInt(3)不可能产生大于2的数如果你把 default 放在最后 你要加个 return null 什么的
switch 里如果没有某个分支如果没有break当匹配到该值的时候就会把后边的语句都执行一遍
switch(x) {
default:
case 0:
System.out.println(x);
return new Circle();
case 1:
System.out.println(x);
return new Square();
case 2:
System.out.println(x);
return new Triangle();
}
switch(rand.nextInt(3)) {
default:
case 0: return new Circle();
case 1: return new Square();
case 2: return new Triangle();
}rand.nextInt(3) 是在运行期产生的,switch的值可以是个变量,但case里面的值一定要常量,这个时候编译器并不知道rand.nextInt(3)的值是多少,这个都是编译期就要断定的!
至于default放在前面不出错 ,放在后面就出错,是因为 该例子中放前面会往下执行,程序执行过程是从上到下的,因为例子中没有break; 所以不管rand.nextInt(3)值是多少都会执行到return new Triangle(); 保证有返回值。 而你把default放在最后,如果程序从上到下执行到return new Triangle();
的话,因为没有break;所以还会执行default ,而default里面什么也没有,没有返回值,所以也会报错, 修改一下也给 default:后面加个默认的实例就可以了去看看java的字节码 可以使用 javap -c 类名 查看,很好用的工具
switch(month)
{
default:
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: return 31; //day = 31;break;
case 4:
case 6:
case 9:
case 11: return 30;
case 2: if(闰年) return 29;
else return 28;
}2.因为return后方法就结束了,所以每个分支进去后return一个对象,后面的代码就不再走,不会产生多个对象
是的,没有太关注题目,没有注意到return
然后把程序调整下应该OK。