大概看了LZ的代码
1. 
if(list[n][0] == " ")  改为 if (list[n][0].equals(" "))
2. 
for(int j = 0; j  < 5; j++) 
      { 
       
      list[n][j] = in.next();  //空格为分隔符 
      if(j == 4) 
      { 
      System.out.println("增加成功!"); 
      display(); 
      } 
       
      } 改为
//for(int j = 0; j  < 5; j++) 
//      { 
       
//      list[n][j] = in.next();  //空格为分隔符 
//      if(j == 4) 
//      { 
//      System.out.println("增加成功!"); 
//      display(); 
//      } 
//       
//      } String s = in.next(); //空格为分隔符
String[] v = s.split(" ");
if (v.length > 5) {
    System.copyarray(list[n], v, v.length);
} else {
    System.copyarray(list[n], v, v.length);
    for (int j=v.length; j<5; j++) list[n][j] = " ";
}
//if (v.length > 0) { //这个判断表示有数据输入
    System.out.println("增加成功!"); 
    display(); 
//}3.
String s = in.nextLine(); 改为 String s = in.next(); 

解决方案 »

  1.   

    String[] v = s.split(" "); 
    这个参数为空格,运行后会有错误。我查了一下API,这个方法的参数只有:和o,没有空格。
    在第一个问题中,我把 System.out.print("请输入:"); 放进下一个if语句内,就不会出现两个“请输入:”。  
    第一、第三问题已解决,然而有新的问题出来了。
    新问题:当执行删除操作时,如果输入要删除的编号为5的话,编译器会给出一个java.lang.ArrayIndexOutofBoundsExciption错误,大于5反而没错误?
    请教下应如何解决?
      

  2.   

    String[] v = s.split(" ");  -> String[] v = s.split("\\s"); 在第一个问题中,我把 System.out.print("请输入:"); 放进下一个if语句内,就不会出现两个“请输入:”。   
    ---------------
    if(list[n][0] == " ")  改为 if (list[n][0].equals(" ")) 
    字符串比较正确用法是equals,如果你能正常运行,说明你刚好碰巧用到的" "是同一个常量。新问题
    大于5时因为第一个k  > list.length判断就是ture了,所以||后面的list[k - 1][0] == " "没有判断,但是等于5时,第一个判断是false,接着继续判断list[k - 1][0] == " ",这里凑巧符合条件(如果你曾经增加过以后再删除你就发现这个判断是失败的,原因就是上面说的,字符串判断要用equals,=和equals的区别很多帖子里都说得很多了,我就不细说了),于是程序走到for(; j  < list[k].length; j++) ,因为k等于,所以数组越界了(k是从0到4,这点LZ应该清楚吧)
      

  3.   

    String[] v = s.split("\\s");  
    改成这样的话,操作时还是有问题的。
    我到现在还是想不明白,把System.out.print("请输入:"); 放进下一个if语句内,不会出现两个“请输入:”,而放在外面就会出现两个“请输入:”?
    其他问题我改过来了。
    谢谢!    
      

  4.   

    在系统中System.out.println("n=" + n);//看看n的情况 
    当你第一次增加时 
    if(list[n][0] == " ") //不知道你改成equals了没有 
    这次判断成功,所以最追加了一条记录,但此时n没有改变,还是3 
    当你第二次增加时,首先输出一次“请输入”,而此时因为n是3 
    所以if(list[n][0] == " ") 判断失败 
    程序走到 
    else   
         {  
         n++;  
         add();  
         }  
    又再次调用了add方法,这时又输出一次“请输入”所以就是你说的输出2次了 
    所以应该在追加成功后对增加n 
    即 
    if(j == 4)  
          {  
          System.out.println("增加成功!");  
          display();  
          n++;//这里 
          }  
    然后 
    else   
         {  
         n++;  
         add();  
         }  
    这部分不要。 而你把“请输入”放到if里,也就是 
    只有if(list[n][0] == " ")判断成功才会输出 
    所以第二次增加时,因为n是3 
    所以if(list[n][0] == " ") 判断失败,所以没有输出“请输入” 
    而程序走到 
    else   
         {  
         n++;  
         add();  
         }  
    又再次调用了add方法,这时n=4 
    if(list[n][0] == " ") 判断成功,所以这时才输出“请输入”,所以也就只有一次了 这样说明,LZ该清楚了吧,建议你在学习的时候,自己在程序中多打印一些信息,这样你自己就可以根据这些信息去追踪程序的执行顺序,然后自己再去想想为什么会这样。多动手多思考才有助于提高。