| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3835 人关注过本帖, 1 人收藏
标题:switch语句问题
只看楼主 加入收藏
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
啊!了解了!谢谢了!

编程小菜
2008-07-07 20:36
a383369542
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-7-8
收藏
得分:0 
程序我们注重思想,数据库我们注重原理,生活我们注重感情。07级程序&&数据库QQ交流群48335578,欢迎志士的加入
2008-07-08 16:05
hezhaofei
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-6-4
收藏
得分:0 
学技术。长见识,
2008-07-10 15:06
yyhesansan
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-6-29
收藏
得分:0 
特殊的switch用法
import java.util.Random;

class Shape{

    void draw(){}

    void erase(){}

}

class Circle extends Shape{

    void draw(){

        System.out.println("Circle.draw()");

    }

    void erase(){

        System.out.println("Circle.erase");

    }

}

class Square extends Shape{

    void draw(){

        System.out.println("Square.draw()");

    }

    void erase(){

        System.out.println("Square.erase");

    }

}

class Triangle extends Shape{

    void draw(){

        System.out.println("Triangle.draw()");

    }

    void erase(){

        System.out.println("Triangle.erase");

    }

}

class RandomShapeGenerator{

    private Random random = new Random();

    public Shape next(){           //error,    此方法必须返回 Shape 类型的结果   

        switch(random.nextInt(3)){

        case 0:return new Circle();

        case 1:return new Square();

        case 2:return new Triangle();

        }

    }

}

public class Duotai{

    private static RandomShapeGenerator gen = new RandomShapeGenerator();

    public static void main(String[] args){

        Shape[] s = new Shape[4];

        for( int i = 0; i< s.length; i++ ){

            s[i] = gen.next();

        for( int j = 0; j< s.length; j++ ){

            s[j].draw();

        }

        }

    }

}

在上面的代码中会出现错误.编译器报错如下:

Exception in thread "main" java.lang.Error: 无法解析的编译问题:

    此方法必须返回 Shape 类型的结果

    at RandomShapeGenerator.next(Duotai.java:88)

    at Duotai.main(Duotai.java:102)

 

其实因为编译器不可能完全智能判断你的switch语句已经包含所有情况了.
所以要么在switch中加个default分支,要么在switch之外加个return null;

解决方案1:加一个defaule分支.

class RandomShapeGenerator{

    private Random random = new Random();

    public Shape next(){           

        switch(random.nextInt(3)){

        case 0:return new Circle();

        case 1:return new Square();

        case 2:return new Triangle();

        default:return new Shape();//添加了一个分支.

        }

    }

}

解决方案2: 在switch之外加个Shape s = null;

class RandomShapeGenerator{

    private Random random = new Random();

    public Shape next(){           

        Shape s = null;

        switch(random.nextInt(3)){

        case 0:return s = new Circle();

        case 1:return s = new Square();

        case 2:return s = new Triangle();

        }

        return s;

    }

}
2008-07-10 15:44
快速回复:switch语句问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017197 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved