j2se中以下这段程序为什么会报错?

问题描述

rtimportjava.util.*;classShape{publicvoiddraw(){}publicvoiderase(){}}classCircleextendsShape{publicvoiddraw(){System.out.println("Circle.draw()");}publicvoiderase(){System.out.println("Circle.erase()");}}classSquareextendsShape{publicvoiddraw(){System.out.println("Square.draw()");}publicvoiderase(){System.out.println("Square.erase()");}}classTriangleextendsShape{publicvoiddraw(){System.out.println("Triangle.draw()");}publicvoiderase(){System.out.println("Triangle.erase()");}}classRandomShapeGenerator{privateRandomrand=newRandom(47);publicShapenext(){switch(rand.nextInt(3)){default:case0:returnnewCircle();case1:returnnewSquare();case2:returnnewTriangle();}}}publicclasstest/*extendsA*/{privatestaticRandomShapeGeneratorgen=newRandomShapeGenerator();publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubShape[]s=newShape[3];for(inti=0;i<s.length;i++){s[i]=gen.next();for(Shapeshp:s){shp.draw();}}}}

报错:Exceptioninthread"main"java.lang.NullPointerExceptionatj2se.test.main(test.java:81)第81行即:shp.draw();这行我是新手,刚学java的,望指教,谢谢!

解决方案

解决方案二:
for(inti=0;i<s.length;i++){s[i]=gen.next();for(Shapeshp:s){shp.draw();}}

这两层循环有些冗余for(inti=0;i<s.length;i++){for循环就是想遍历数组sfor(Shapeshp:s){for-each循环也是遍历数组s楼主的空指针问题出在Shape[]s=newShape[3];楼主只初始化了长度为3的Shape型的数组,但是却没有给s[i]挨个赋值,即没有给数组元素指向对象的引用所以shp都是null,再调用draw就空指针了
解决方案三:
参考楼上吧。/
解决方案四:
引用2楼rui888的回复:

参考楼上吧。/

哈喽,放假了吗?我还在上班中啊
解决方案五:
我的看法是switchcase中default应该放在最后
解决方案六:
引用3楼magi1201的回复:

Quote: 引用2楼rui888的回复:
参考楼上吧。/

哈喽,放假了吗?我还在上班中啊

还没,国家法定,还得到明天晚上。
解决方案七:
把main函数改成这样就行了,你循环2次了publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubShape[]s=newShape[3];for(inti=0;i<s.length;i++){gen.next().draw();}}

解决方案八:
参考一楼吧。
解决方案九:
一楼是正确的。Shape[]s=newShape[3];//定义未初始化for(inti=0;i<s.length;i++){s[i]=gen.next();//初始化一个for(Shapeshp:s){shp.draw();//第一次遍历的时候只有s[0],初始化,其他的都没有}

时间: 2024-08-01 12:12:42

j2se中以下这段程序为什么会报错?的相关文章

急!用jdbc中executeQuery()方法执行查询为什么在程序中停顿很长时间,甚至报错。

问题描述 急!用jdbc中executeQuery()方法执行查询为什么在程序中停顿很长时间,甚至报错. 程序中的sql如以下: select t3.*,t1.costPrice as costP,t1.retailPrice as retailP,t1.basicPricing as basicP from goodsGroupCopy t1 left join groupCopyGoods t2 on t1.id = t2.goodsGroupCopyId left join goods t

大家来找找这段程序的错误找错(来者有分呀!!!)

问题描述 我想在datagridview上加字段但程序来是报错怎么回事呀?我的代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Data.SqlClient;namespaceJYMaterMangerSystem

spring-maven 打jar包,引发程序运行时候报错

问题描述 maven 打jar包,引发程序运行时候报错 java项目A,用maven 打完jar包之后,放入项目B中使用,运行报如下错误java.lang.NoSuchFieldError: ALIAS_TO_ENTITY_MAP: 用MyEclipse 自带的export jar打包,却没有这个问题,很是郁闷,求解... 报错代码:query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); 解决方案 请检查确认项目 B 里的 A.

问题-刚开始学习java ,自己写了一个聊天小程序,没报错但是有毛病,希望能帮忙问一下

问题描述 刚开始学习java ,自己写了一个聊天小程序,没报错但是有毛病,希望能帮忙问一下 刚开始学习java ,自己写了一个聊天小程序,没有报任何错误.测试时打开3个聊天小窗口 A,B,C,在A中输入文字,只在B中显示出来了,而且显示出了三句相同语句.查了好几个小时都没有查出来,希望高手能帮帮忙,看看是怎么回事,并且告诉我是通过什么方法找出来的. 以下是客户端和服务器端代码 客户端: import java.awt.*; import java.awt.event.*; import java

svn-在Myeclipse中保存代码时,SVN总是报错,已百度,答案五花八门。求指导 谢谢!

问题描述 在Myeclipse中保存代码时,SVN总是报错,已百度,答案五花八门.求指导 谢谢! 写完一段代码按保存(CTRL+S)时 总是报这样的错误 解决方案 http://zhidao.baidu.com/link?url=gLO2oBMgYsBRCUQVbUzkuWP3geLbG-_cBa6bdDSnxrVNkrNp8rnli7U0mGz-6SW2_qccL6tVVNPepFEaoCfIu6rApe2lVmVFlKGBAbDlCJ_ http://zhidao.baidu.com/lin

eclipse中,使用tomcat插件启动tomcat报错

问题描述 eclipse中,使用tomcat插件启动tomcat报错 具体错误: SEVERE: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [/manager] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) at org.apache.catalin

apache-tomcat在myeclipse中一直是部署不起来,报错信息如下

问题描述 tomcat在myeclipse中一直是部署不起来,报错信息如下 Dec 19, 2015 7:45:47 PM org.apache.coyote.AbstractProtocol init SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-bio-8080"] java.net.BindException: Address already in use :8080 a

c++-这程序编译无报错,运行时出错

问题描述 这程序编译无报错,运行时出错 #include<iostream> int Two(int a, const int* c) { if(a >= *c) return a; else return *c; } int main() { std::cout << "请输入两个数:" ; int a, b, *c; std::cin >> a >> b; *c = b; std::cout << "二者中

android-Android 开发的程序eclipse没报错,但意外停止

问题描述 Android 开发的程序eclipse没报错,但意外停止 目的是编写一个单点触摸用户输入的例子,以下是程序代码 package com.example.ontouchlistenerdemo; import android.app.Activity; import android.content.Context; import android.content.res.AssetManager; import android.graphics.*; import android.os.