问题点:
1.在使用测试类时,<<浪漫满屋>>这张DVD,明明已经设置为"未借出",可是偏偏显示就是"已经借出,操作不成功!"
2.我知道是DVDMgr类的lend()方法有问题,可就是找不到!请老师帮帮我!很头痛!!package Part2;public class DVDSet {
String[] name = new String[50];// 存储DVD名称
int[] state = new int[50];// 存储DVD状态 // 初始化
public void initial() {
name[0] = "罗马假日";
state[0] = 1;// “0”借出 ,"1"未借出
name[1] = "越狱";
state[1] = 1;
name[2] = "浪漫满屋";
state[2] = 1;
}}import java.util.*;public class DVDMgr {
DVDSet DVDSet_obj = new DVDSet();
Scanner s = new Scanner(System.in);

// 加载数据
public void setData() {
DVDSet_obj.initial();

} // 开始菜单
public void startMenu() {
System.out.println("欢迎使用MiniDVD Mgr 1.0");
System.out.println("- - - - - - - - - - - - - - - - - -"
+ " - - - - - - - - - - - - - - ");
System.out.println("1.查看DVD");
System.out.println("2.借出DVD");
System.out.println("3.退出MiniDVD Mgr");
System.out.println("- - - - - - - - - - - - - - - - - -"
+ " - - - - - - - - - - - - - - ");
System.out.println("请选择:"); switch (s.nextInt()) {
case 1:
System.out.println("查看DVD\n");
search();// 执行查询
break;
case 2:
System.out.println("借出DVD\n");
lend();// 标记借出
break;
case 3:
System.out.println("\n欢迎使用,谢谢!");
break; } } // 查询所有DVD信息
public void search() {
System.out.println("MyDVD Mgr 1.0------>查询DVD\n");
// 查询并输出
for (int i = 0; i < DVDSet_obj.name.length; i++) {
System.out.print("<<" + DVDSet_obj.name[i] + ">>"); if (DVDSet_obj.state[i] == 0) {
System.out.print("\t已借出");
} System.out.println();
}
System.out
.println("-------------------------------------------------------------------------------------");
returnMain();
} // 返回主菜单
public void returnMain() {
System.out.println("输入0返回");

if (s.nextInt()==1) {
startMenu();// 输入0返回主菜单 } else {
System.out.println("输入错误,异常终止!"); } } // 借出
public void lend() { System.out.println("MyDVD Mgr 1.0---->借出DVD\n");
System.out.println("请输出要借的DVD名称:"); for (int i = 0; i < DVDSet_obj.name.length; i++) {
// 如果输入的DVD名称与name[]数组的元素匹配,且对应的state[]状态为“1”输出操作成功
if (DVDSet_obj.name[i].equals(s.next()) && DVDSet_obj.state[i] == 1) { System.out.println("操作成功!");
DVDSet_obj.state[i] = 0;// 借出后,标记为"已借出" } else {
System.out.println("该DVD已借出,操作不成功!"); }
}
}}package Part2;public class test {
public static void main(String[] args) {
DVDMgr DVDMgr_obj = new DVDMgr();
DVDMgr_obj.setData();
DVDMgr_obj.startMenu();





}}

解决方案 »

  1.   

    你应该把lend方法这样写:
    // 借出
        public void lend() {        System.out.println("MyDVD Mgr 1.0---->借出DVD\n");
            System.out.println("请输出要借的DVD名称:");
            String name = s.next();        boolean b = false;
            int count = 0;        for (int i = 0; i < DVDSet_obj.name.length; i++) {
                // 如果输入的DVD名称与name[]数组的元素匹配,且对应的state[]状态为“1”输出操作成功
                if (DVDSet_obj.name[i].equals(name) && DVDSet_obj.state[i] == 1) {
                    b = true;
                    count = i;
                    break;
                }
            }        if (b) {
                System.out.println("操作成功!");
                DVDSet_obj.state[count] = 0;// 借出后,标记为"已借出"
            } else {
                System.out.println("该DVD已借出,操作不成功!");
                b = false;
            }
    }
      

  2.   

    for (int i = 0; i < DVDSet_obj.name.length; i++) { 
    // 如果输入的DVD名称与name[]数组的元素匹配,且对应的state[]状态为“1”输出操作成功 
    if (DVDSet_obj.name[i].equals(s.next()) && DVDSet_obj.state[i] == 1) { System.out.println("操作成功!"); 
    DVDSet_obj.state[i] = 0;// 借出后,标记为"已借出" } else { 
    System.out.println("该DVD已借出,操作不成功!"); } 
    } 你数组里第一个元素是罗马假日,所以你输入浪漫满屋的时候已经到else里去了,呵呵
      

  3.   

    for (int i = 0; i < DVDSet_obj.name.length; i++) { 
    // 如果输入的DVD名称与name[]数组的元素匹配,且对应的state[]状态为“1”输出操作成功 
    if (DVDSet_obj.name[i].equals(s.next()) && DVDSet_obj.state[i] == 1) { System.out.println("操作成功!"); 
    DVDSet_obj.state[i] = 0;// 借出后,标记为"已借出" } else { 
    System.out.println("该DVD已借出,操作不成功!"); } 
    } 你数组里第一个元素是罗马假日,所以你输入浪漫满屋的时候已经到else里去了,呵呵
      

  4.   

    你循环里的判断有问题, 应该改成:
    boolean findFlag = false;
    for (int i = 0; i < DVDSet_obj.name.length; i++) {
      // 如果输入的DVD名称与name[]数组的元素匹配,且对应的state[]状态为“1”输出操作成功
      if (DVDSet_obj.name[i].equals(s.next()){
        findFlag = true;
        if(DVDSet_obj.state[i] == 1){
          System.out.println("操作成功!");
          DVDSet_obj.state[i] = 0;// 借出后,标记为"已借出"
          break;
        }else{
          System.out.println("该DVD已借出,操作不成功!");
        }
      }
    }
    if(!findFlag){
      System.out.println("该DVD不存在!!");
    }
      

  5.   

    又出现了新的问题,按照各位老师的做法后,
    1.当设定“罗马假日”state[]为“0”已借出的话
    2.运行test,显示为空指针异常.
      

  6.   

    原因是DVDSet类中你定义了:String[] name = new String[50];// 存储DVD名称你把这个数组定义了长度为50,而只设了3个有效值,其它都默认为null。
    所以在lend方法的循环中就会循环50次:for (int i = 0; i < DVDSet_obj.name.length; i++) {
                // 如果输入的DVD名称与name[]数组的元素匹配,且对应的state[]状态为“1”输出操作成功
                if (DVDSet_obj.name[i].equals(name) && DVDSet_obj.state[i] == 1) {
                    b = true;
                    count = i;
                    break;
                }
            }当循环到第四次的时候,取的DVDSet_obj.name[i]就是null了,你用它来.equals肯定会报空指针了。解决办法:
    将DVDSet类改成:public class DVDSet {    String[] name = null;// 存储DVD名称    int[] state = null;;// 存储DVD状态    // 初始化
        public void initial() {        name = new String[3];
            name[0] = "罗马假日";
            name[1] = "越狱";
            name[2] = "浪漫满屋";        state = new int[3];
            state[0] = 0;// “0”借出 ,"1"未借出
            state[1] = 1;
            state[2] = 1;
        }
    }
      

  7.   

    恩,感谢这位老师的指点,很切入要题.是个很好的思路.
    我是这样做的,在lend()方法中首先判断name[]数组是否为null,再进行后面动作.
    for (int i = 0; i < DVDSet_obj.name.length; i++) {
    // 如果输入的DVD名称与name[]数组的元素匹配,且对应的state[]状态为“1”输出操作成功
    if (DVDSet_obj.name[i] != null) {
    if (DVDSet_obj.name[i].equals(name) && DVDSet_obj.state[i] == 1
    && !DVDSet_obj.name[i].equals(null)) {
    b = true;
    count = i;
    break;
    }
    } }