小弟我在学校写的一个程序,遇到一个BUG求解

我在学校写的一个程序,遇到一个BUG求解!程序是一个关于DVD管理器的模拟小软件。一共分为三个类://这个是程

我在学校写的一个程序,遇到一个BUG求解!
程序是一个关于DVD管理器的模拟小软件。
一共分为三个类:
//这个是程序入口

import java.util.Scanner;
public class Page341 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);

DVD d=new DVD();
DVD[] sd=new DVD[10];
Menu m=new Menu();
m.initalDvd(sd);//初始化
m.showMenu();//菜单展示


boolean cont=true;
int input=0;
while(cont){
System.out.print("请选择:");
input=sc.nextInt();
switch(input){
case 1:
System.out.println("--------> 新增DVD");
m.addMenu(sd);
m.startMenu();
break;
case 2:
System.out.println("--------> 查看DVD");
m.lookBookMenu(sd);
m.startMenu();
break;
case 3:
System.out.println("--------> 删除DVD");
m.deleteBookMenu(sd);
m.startMenu();
break;
case 4:
System.out.println("--------> 借出DVD");
m.lendBookMenu(sd);
m.startMenu();
break;
case 5:
System.out.println("--------> 归还DVD");
m.returnBookMenu(sd);
m.startMenu();
break;
case 6:
System.out.println("谢谢使用!");
cont=false;
}
}
}

//这个是DVD类
public class DVD {
String name;//书名
String lendTime;//借出时间
int state=0;//书籍借出与否的状态
}

//这个是菜单类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;


public class Menu {
Scanner sc=new Scanner(System.in);
public void showMenu(){
System.out.println("欢迎使用迷你DVD管理器\n"+
                "------------------------------------------------");
        System.out.println("1.新增DVD\n"+
                           "2.查看DVD\n"+
                   "3.删除DVD\n"+
                           "4.借出DVD\n"+
                   "5.归还DVD\n"+
                           "6.退出");
        System.out.println("------------------------------------------------");
}
//初始化数组
public void initalDvd(DVD[] sd) {
for (int i = 0; i < 3; i++) {
sd[i]=new DVD();
System.out.print("请输入书名:");
sd[i].name=sc.next();
System.out.print("请输入该书的状态(0,未借出 1,借出):");
sd[i].state=sc.nextInt();
if(sd[i].state==1){
         System.out.println("请输入时间:");
         sd[i].lendTime=sc.next();
}
}
}
//增加DVD
public void addMenu(DVD[] sd) {
boolean condition=false;
String newBookName="";

do {
System.out.println("请输入DVD名称:");


    newBookName=sc.next();
    for (int i = 0; i < sd.length; i++) {
      if(sd[i]==null){
      sd[i]=new DVD();
      sd[i].name=newBookName;
      break;
        }  
         }
  
for (int i = 0; i < sd.length; i++) {
if (sd[i] != null) {
System.out.print(sd[i].name + "");
}
}
System.out.println("是否增加书本?(y/n):");
if(sc.next().equals("n"))
condition=false;
else
condition=true;
} while (condition);
System.out.println("新增《"+newBookName+"》成功! ");
System.out.println("**************************************************");

}
//查看DVD
public void lookBookMenu(DVD[] sd) {
System.out.println("序号\t状态\t名称\t借出日期");
for (int i = 0; i < sd.length; i++) {
if((sd[i]!=null)&&(sd[i].state==1))
     System.out.print((i+1)+"\t"+"已借出\t"+"《"+sd[i].name+"》\t"+sd[i].lendTime);
if((sd[i]!=null)&&(sd[i].state==0))
System.out.print((i+1)+"\t"+"可借\t"+"《"+sd[i].name+"》\t");
if(sd[i]!=null)
    System.out.println();
}

}
//删除DVD
public void deleteBookMenu(DVD[] sd) {
boolean condition=false;
String name="";
do {
System.out.println("请输入DVD名称:");
name = sc.next();
for (int i = 0; i < sd.length; i++) {
if ((sd[i] != null) && (sd[i].name.equals(name))
&& (sd[i].state == 0)){
for (int j = i;; j++) {
if(sd[j+1]==null)
break;
sd[j].name=sd[j+1].name;
  }
}
if ((sd[i] != null) && (sd[i].name.equals(name))
&& (sd[i].state == 1))
System.out.println(sd[i].name + "为借出状态,不能删除!");

}
for (int i = 0; i < sd.length; i++) {
if(sd[i].name!=null)
      if(sd[i].name==(sd[i+1].name)){
 sd[i+1].name="";//这里赋null有BUG,带求解!
 break;
 }
}
for (int i = 0; i < sd.length; i++) {
if(sd[i]!=null)
System.out.print(sd[i].name + " ");
}
System.out.println("是否成功删除?(y/n):");
if(sc.next().equals("y"))
condition=false;
else
condition=true;
} while (condition);
System.out.println("删除《"+name+"》成功! ");
System.out.println("**************************************************");
}
//借出DVD
public void lendBookMenu(DVD[] sd) {
boolean condition=false;
String name="",time="";

do {
System.out.print("请输入DVD名称:");
name = sc.next();
System.out.print("请输入借出日期(年-月-日):");
time = sc.next();
for (int i = 0; i < sd.length; i++) {
if ((sd[i].name.equals(name)) && (sd[i].state != 1)) {
sd[i].lendTime = time;


sd[i].state = sd[i].state + 1;
System.out.println("借出《" + name + "》成功!");
break;
}
if ((sd[i].name.equals(name)) && (sd[i].state == 1)){
System.out.print("该书已被借出!");
condition=true;
}
}
} while (condition);
System.out.println("**************************************************");
}
//归还DVD
public void returnBookMenu(DVD[] sd) {
String name="",time="";
double pay=0;

System.out.print("请输入DVD名称:");
name = sc.next();
System.out.print("请输入归还日期(年-月-日):");
time = sc.next();
for (int i = 0; i < sd.length; i++) {
if(((sd[i].state-=1)==0)&&(sd[i].name.equals(name))){
System.out.println("归还《"+sd[i].name+"》成功!");
break;
}
}

for (int i = 0; i < sd.length; i++) {
if(sd[i].name.equals(name)){
System.out.print("借出日期为:"+sd[i].lendTime+"\n");
System.out.print("归还日期为:"+time);
pay=charge(sd[i].lendTime,time)*1;
System.out.println("应付租金(元):"+pay);
break;
}
}


System.out.println("**************************************************");
}

//计算时间差
public long charge(String dstr1,String dstr2){
long charge=0;
SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");
try{
Date d1=sd.parse(dstr1);
Date d2=sd.parse(dstr2);
charge=(d2.getTime()-d1.getTime())/(24*60*60*1000);
}catch(ParseException e){
e.printStackTrace();
}
return charge;
}

     public void startMenu(){
System.out.print("输入0返回主菜单:");
if(sc.nextInt()==0)
showMenu();
}
}


如上代码在菜单类中的删除DVD书名方法中,我删除了一个书名后,数据前移,最后一位,还能打印出“null”这个符号来。让我很无解,无语。求各位大侠帮忙!!!小弟在此感谢你们了!
[解决办法]
if(sd[i].name!=null)
System.out.print(sd[i].name + " ");//这里仍然打印出null
[解决办法]
先看个Test
public class Test {
public static void main(String[] args) {
String[] str = {"a",null,"bb"};
System.out.println(str[1]);
System.out.println(str == null);
System.out.println(str[1]==null);
}
}
输出结果为null,false,true
所以需要修改你代码的地方为
1、
for (int i = 0; i < sd.length; i++) {
if(sd[i].name!=null)
      if(sd[i].name.equals(sd[i+1].name)){
 sd[i+1].name=null;//这里赋null有BUG,带求解!
 break;
   }
}
将=""改成=null,没有影响,因为如果是null,输出为null是正确输出
2、
//查看DVD
public void lookBookMenu(DVD[] sd) {
System.out.println("序号\t状态\t名称\t借出日期");
for (int i = 0; i < sd.length; i++) {
if((sd[i].name!=null)&&(sd[i].state==1))


     System.out.print((i+1)+"\t"+"已借出\t"+"《"+sd[i].name+"》\t"+sd[i].lendTime);
if((sd[i].name!=null)&&(sd[i].state==0))
System.out.print((i+1)+"\t"+"可借\t"+"《"+sd[i].name+"》\t");
if(sd[i].name!=null)
    System.out.println();
}

}

数组肯定不为null,需要数组元素判断是否为null