对象为空,找半天没找出原因

存在666 2009-12-29 01:30:07
Shape.java


public abstract class Shape
{
abstract void draw();
}


Circle.java


public class Circle extends Shape
{

@Override
public void draw()
{
System.out.println("draw a circle!");
}

}


Line.java


public class Line extends Shape
{

@Override
public void draw()
{
System.out.println("draw a line!");
}

}


Rectangle.java


public class Rectangle extends Shape
{

@Override
public void draw()
{
System.out.println("draw a Rectangle!");
}

}


ShapeFactory.java


import java.util.HashMap;
import java.util.Map;

public class ShapeFactory
{
public static final int SHAPE_TYPE_CIRCLE=1;
public static final int SHAPE_TYPE_RECTANGLE=2;
public static final int SHAPE_TYPE_LINE=3;

private static Map<Integer,String> shapes=new HashMap<Integer,String>();

static
{
shapes.put(new Integer(SHAPE_TYPE_CIRCLE),"Circle");
shapes.put(new Integer(SHAPE_TYPE_RECTANGLE),"Rectangle");
shapes.put(new Integer(SHAPE_TYPE_LINE),"Line");
}

public static Shape getShape (int type)
{
try
{
String className=shapes.get(new Integer(type));
return (Shape) Class.forName(className).newInstance();
}
catch(Exception e)
{
return null;
}
}
}



Panel.java


import java.io.*;

public class Panel
{
public void selectShape() throws Exception
{
System.out.println("请输入形状类型:");

BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
int shapeType=Integer.parseInt(input.readLine());

Shape shape=ShapeFactory.getShape(shapeType);

if(shape==null)
System.out.println("输入的形状的不存在!");
else
shape.draw();
}

public static void main(String[] args) throws Exception
{
new Panel().selectShape();
}

}



运行shape一直为空,我不知道什么原因,检查好久了!
...全文
166 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
J20082020 2009-12-29
  • 打赏
  • 举报
回复
路过 学习
keeya0416 2009-12-29
  • 打赏
  • 举报
回复
共同进步 呵呵
存在666 2009-12-29
  • 打赏
  • 举报
回复
return (Shape) Class.forName("Obj.java."+className).newInstance();
要这样写,我草。。。。
谢谢上面的各位,上面几位说的全路径,提醒了我,跑去看API。。。。!
whut_lcy 2009-12-29
  • 打赏
  • 举报
回复
pass
keeya0416 2009-12-29
  • 打赏
  • 举报
回复
楼主程序目前还没考虑那些,他只是单纯的用数字字符串。不好意思,我的错。
楼主再看看 如我的包名是 com.hisoft.othersource 我的代码就是:
return (Shape) Class.forName("com.hisoft.othersource." + className).newInstance
JamnyXie 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 keeya0416 的回复:]
引用 12 楼 jamnyxie 的回复:
int shapeType=Integer.parseInt(input.readLine());
这句话请楼主改正,因为如果你输入的是字符串,而不是数字,是无法转换成整型的。会有NumberFormateException

运行测试,除了这个错,我还没有报任何错。。。。


你再试试,另外你再看看Integer的几个方法的用处。楼主的用法没有任何错误
[/Quote]

我指的字符串,并不是纯数字的字符串,请ls能够理解清楚。
提示输入:
此时如果你输入的是:f348gr 之类的只要不是单纯数字的字符串,NumberFormatException。
keeya0416 2009-12-29
  • 打赏
  • 举报
回复
。。。。我这跑的是对的啊
你加 “ . ”了么
存在666 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 keeya0416 的回复:]
return (Shape) Class.forName(className).newInstance();
这个 className 你再在前边加上你的几个类的包名就可以了
[/Quote]
报错!说没有className!
keeya0416 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jamnyxie 的回复:]
int shapeType=Integer.parseInt(input.readLine());
这句话请楼主改正,因为如果你输入的是字符串,而不是数字,是无法转换成整型的。会有NumberFormateException

运行测试,除了这个错,我还没有报任何错。。。。
[/Quote]

你再试试,另外你再看看Integer的几个方法的用处。楼主的用法没有任何错误
keeya0416 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 magicbu 的回复:]
问题应该是出在new Integer这里
初始化时map的key所用的Integer引用值和shapes.get(new Integer(type))中new Integer(type)的引用值是不一样的

new会生成新的引用值,不能随便用的

[/Quote]
map的机制不是你所想的那样
keeya0416 2009-12-29
  • 打赏
  • 举报
回复
return (Shape) Class.forName(className).newInstance();
这个 className 你再在前边加上你的几个类的包名就可以了
JamnyXie 2009-12-29
  • 打赏
  • 举报
回复
int shapeType=Integer.parseInt(input.readLine());
这句话请楼主改正,因为如果你输入的是字符串,而不是数字,是无法转换成整型的。会有NumberFormateException

运行测试,除了这个错,我还没有报任何错。。。。
luffyke 2009-12-29
  • 打赏
  • 举报
回复
最好的办法就是debug
magicbu 2009-12-29
  • 打赏
  • 举报
回复
问题应该是出在new Integer这里
初始化时map的key所用的Integer引用值和shapes.get(new Integer(type))中new Integer(type)的引用值是不一样的

new会生成新的引用值,不能随便用的
存在666 2009-12-29
  • 打赏
  • 举报
回复
我的.java 文件全写在Obj.java目录下,全是public ,怎么说找不到类!
zhaining522 2009-12-29
  • 打赏
  • 举报
回复
return (Shape) Class.forName(className).newInstance();
类名要全路径。。。

JamnyXie 2009-12-29
  • 打赏
  • 举报
回复
我输入 1 或者 2 或者 3 都能正确打印出一句话然后退出 。。。
healer_kx 2009-12-29
  • 打赏
  • 举报
回复
debug
存在666 2009-12-29
  • 打赏
  • 举报
回复
你输入1或者2或者3 一直输出 输入的形状的不存在!
zhangwenmin 2009-12-29
  • 打赏
  • 举报
回复
debug一下不就行了么?一行行检察
加载更多回复(3)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧