100分 求教一道java题 各位想要分的快来!!

publicclassDVDSet{String[]name=newString[15];int[]state=newint[15];publicvoidinitial(... public class DVDSet {
String[] name=new String[15];
int[] state=new int[15];
public void initial(){
name[0]="大秦帝国";
state[0]=0; //0表示已借出 1表示还有存货
name[1]="感官世界";
state[1]=1;
name[2]="切肤之爱";
state[2]=1;
name[3]=" 力王 ";
state[3]=0;
name[4]="史前一万年";
state[4]=1;
name[5]="大气层消失";
state[5]=1;
}
}

public class start {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
DVDMgr mgr=new DVDMgr();
mgr.setData();
mgr.startMenu();
}

}

import java.util.*;
public class DVDMgr {
DVDSet dvd=new DVDSet(); //调用DVDSet类
Scanner input=new Scanner(System.in);
public void setData(){
dvd.initial();
}
public void startMenu(){
System.out.println("欢迎使用MiniDVD Mgr 1.0");
System.out.println("1.查看");
System.out.println("2.借DVD");
System.out.println("3.退出");

int num=input.nextInt();//接受选择的数字
switch(num){
case 1:
showDVD();
break;
case 2:
lend();
break;
case 3:
System.out.println("欢迎您的使用!");
break;
default:
System.out.println("输入错误,异常终止!");
}
}
public void returnMain(){ //返回方法
System.out.println("输入数字0,返回上一级菜单");
int num=input.nextInt();
if(num==0){
startMenu();
}else
System.out.println("输入错误,异常终止");
}
public void showDVD(){ //显示DVD的方法
for(int i=0;i<dvd.name.length;i++){
if(dvd.name[i]==null){ //如果数组为空 则挑出循环
break;
}
System.out.print("《"+dvd.name[i]+"》");
if(dvd.state[i]==0){
System.out.println("\t\t\t\t已借出");
}else
System.out.println("\t\t\t\t末借出");

}
returnMain(); //返回上级菜单
}
public void lend(){ //借DVD的方法
System.out.print("请输入要借的DVD:");
String num=input.next(); //接受要借的DVD
for(int i=0;i<dvd.name.length;i++){
if((dvd.name[i].equals(num))&&dvd.state[i]==1){
System.out.println("可借");
System.out.println("操作成功!!");
dvd.state[i]=0; //让存储末借的数字变为可借
break;
}
else if((dvd.name[i].equals(num))&&dvd.state[i]==0){
System.out.println("已借出");
break;
}

System.out.println("抱歉!您要借的DVD不存在!");

}
returnMain();
}
}

我这个DVD程序 只要是数组里面有的电影都好使 但输入数组里不存在的电影时就会产生错误,按照我的编程 应该输出 System.out.println("抱歉!您要借的DVD不存在!"); 才对啊 这是怎么回事?
请各位老师详细解答!!
展开
 我来答
love__shuai
2008-09-17 · TA获得超过563个赞
知道小有建树答主
回答量:875
采纳率:0%
帮助的人:0
展开全部
不懂就不要乱说,误人子弟,自己验证过了吗?
主要错误在这里,dvd.name.length这个是15,而你却只有实例化了6个,这肯定会抛空指针异常的
当然还是有几个小错了,我就不一一说明了,你看看我给你改的程序
只对这个类DVDMgr
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class DVDMgr {
DVDSet dvd=new DVDSet();

//调用DVDSet类
Scanner input=new Scanner(System.in);
public void setData(){
dvd.initial();
}
public void startMenu(){
System.out.println("欢迎使用MiniDVD Mgr 1.0");
System.out.println("1.查看");
System.out.println("2.借DVD");
System.out.println("3.退出");
dvd.initial();
int num=input.nextInt();//接受选择的数字
switch(num){
case 1:
showDVD();
break;
case 2:
lend();
break;
case 3:
System.out.println("欢迎您的使用!");
break;
default:
System.out.println("输入错误,异常终止!");
}
}
public void returnMain(){ //返回方法
System.out.println("输入数字0,返回上一级菜单");
int num=input.nextInt();
if(num==0){
startMenu();
}else
System.out.println("输入错误,异常终止");
}
public void showDVD(){ //显示DVD的方法
for(int i=0;i<dvd.name.length;i++){
if(dvd.name[i]==null){ //如果数组为空 则挑出循环
break;
}
System.out.print("《"+dvd.name[i]+"》");
if(dvd.state[i]==0){
System.out.println("\t\t\t\t已借出");
}else
System.out.println("\t\t\t\t末借出");

}
returnMain(); //返回上级菜单
}
public void lend(){ //借DVD的方法
System.out.print("请输入要借的DVD:");
String num=null;
int flag=3;
try {
num = new BufferedReader(new InputStreamReader(System.in)).readLine();
} catch (IOException e) {

e.printStackTrace();
}
System.out.println(dvd.name.length);
for(int i=0;i<6;i++){
if((dvd.name[i].equals(num))&&dvd.state[i]==1){
System.out.println("可借");
System.out.println("操作成功!!");
dvd.state[i]=0; //让存储末借的数字变为可借
flag=1;
break;
}
else if((dvd.name[i].equals(num))&&dvd.state[i]==0){
System.out.println("已借出");
flag=2;
break;
}

}
if(flag==3)
System.out.println("抱歉!您要借的DVD不存在!");
returnMain();
}
}
解封门不张扬8537
2008-09-17 · TA获得超过797个赞
知道小有建树答主
回答量:292
采纳率:0%
帮助的人:353万
展开全部
lend方法里的两个判断分支这错了.

if((dvd.name[i].equals(num))&&dvd.state[i]==1){
....
else if ((dvd.name[i].equals(num)) && dvd.state[i] == 0)

也就是这一句 dvd.name[i].equals(num)
我看你程序的意思是想让他输入序号而不是名字吧?所以这个地方你用了num

但是你比较的时候,却用String类型的名字(dvd.namep[i])和num比较.
如果确实是想按数字比较,就应该用 == 成不是equals

但是上面的问题还不至于抛出NullPointer的错误,仅仅是个逻辑错误.
程序抛错是因为:
String[] name=new String[15];
int[] state=new int[15];
你声明了15个长的数组,但是你初始化时,只初始化了6个,所以从第七个开始,也就是 name[6] 里的值是null.
而你的循环是 i<dvd.name.length 也就是说要循环15次, 所以根据你的逻辑错误,前6次循环肯定是找不到了,从第七次开始,就成了 null.equals(num). 这java时就抛异常了,由于这里没有try catch 语名,后面的循环也中止了. 程序就此结束,你的问题就在这里.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无敌小咪
2008-09-17 · 超过29用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:0
展开全部
异常的原因是:没有做空值检测:
看我给你写的lend方法,做了一点小调整,这样输出更好,按照你以前的写法,就算输入已有的,还是会输出"抱歉!"
public void lend() { // 借DVD的方法
System.out.print("请输入要借的DVD:");
String num = input.next(); // 接受要借的DVD

for (int i = 0; i < dvd.name.length; i++) {
if (dvd.name[i] == null) {
System.out.println("抱歉!您要借的DVD不存在!");
break;
} else {
if ((dvd.name[i].equals(num)) && dvd.state[i] == 1) {
System.out.println("可借");
System.out.println("操作成功!!");
dvd.state[i] = 0; // 让存储末借的数字变为可借
break;
} else if ((dvd.name[i].equals(num)) && dvd.state[i] == 0) {
System.out.println("已借出");
break;
}
}
}
returnMain();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
slsunjianan
2008-09-17 · TA获得超过235个赞
知道小有建树答主
回答量:335
采纳率:0%
帮助的人:162万
展开全部
import java.util.*;
public class DVDget {
Map<Integer,DVD> dvd;
public void setDVDdata(){
dvd=new HashMap<Integer,DVD>();
dvd.put(1,new DVD("罗马假日"));
dvd.put(2, new DVD("赵狱"));
dvd.put(3, new DVD("浪漫满屋"));
}
public void select(){
System.out.println("请选择");
Scanner input=new Scanner(System.in);
switch(input.nextInt()){
case 1:
print();
break;
case 2:
System.out.println("欢迎使用");
getdvd();
break;
case 3:
System.out.println("退出DVD");
System.exit(0);
break;
}
}
public void print(){
for(int dvdname:dvd.keySet()){
System.out.print(dvd.get(dvdname));
if(dvd.get(dvdname).getstate()==1){
System.out.println(" 没有借出");
}else if(dvd.get(dvdname).getstate()==0){
System.out.println(" 己借出");
}
}
this.select();
}
public void getdvd(){
Scanner input=new Scanner(System.in);
String name=input.next();
for(int dvdname:dvd.keySet()){
if(dvd.get(dvdname).getname().equals(name)){
dvd.get(dvdname).setstate(0);
}
}
this.select();
}
public static void main(String[] agrs){
System.out.println("欢迎使用DVD");
System.out.println("-----------------------------------");
System.out.println("1查看DVD");
System.out.println("2借出DVD");
System.out.println("3退出DVD");
DVDget set=new DVDget();
set.setDVDdata();
set.select();
}
}
public class DVD {
private String name;
private int state;
DVD(String name){
this.name=name;
this.state=1;
}
public String getname(){
return this.name;
}
public int getstate(){
return this.state;
}
public void setstate(int i){
this.state=i;
}
public String toString(){
return this.name;
}
}

用集合做的,不知道你能不能看懂,还有就是在选择功能时候,输入号码,那里会有异常,自己再改改
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qingdaowpj
2008-09-17 · TA获得超过281个赞
知道小有建树答主
回答量:94
采纳率:0%
帮助的人:112万
展开全部
你的初始化数组定义了长度为15,String[] name=new String[15]; int[] state=new int[15]; 因此你循环的时候for(int i=0;i<dvd.name.length;i++)
dvd.name.length的长度为15而你只是定义了5个元素,其它的dvd.name[i]会报空异常错误,建议用hasmap存储判断,会让你得到你想需要的一种结果,还不是现在结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(9)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式