大概看了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.
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();
这个参数为空格,运行后会有错误。我查了一下API,这个方法的参数只有:和o,没有空格。
在第一个问题中,我把 System.out.print("请输入:"); 放进下一个if语句内,就不会出现两个“请输入:”。
第一、第三问题已解决,然而有新的问题出来了。
新问题:当执行删除操作时,如果输入要删除的编号为5的话,编译器会给出一个java.lang.ArrayIndexOutofBoundsExciption错误,大于5反而没错误?
请教下应如何解决?
---------------
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应该清楚吧)
改成这样的话,操作时还是有问题的。
我到现在还是想不明白,把System.out.print("请输入:"); 放进下一个if语句内,不会出现两个“请输入:”,而放在外面就会出现两个“请输入:”?
其他问题我改过来了。
谢谢!
当你第一次增加时
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该清楚了吧,建议你在学习的时候,自己在程序中多打印一些信息,这样你自己就可以根据这些信息去追踪程序的执行顺序,然后自己再去想想为什么会这样。多动手多思考才有助于提高。