面向对象问题(纯新手)

u013478433 2014-01-15 12:52:00
public class Delete {
String[] names = new String[]{"张三","李四","王五","赵六","田七"};
public boolean DeleteName(String oldName){
boolean flag =false;
int index = 1;

for (int i = 0; i < names.length; i++) {
index = i;
if(oldName.equals(names[i])){
for(int j =i;j<names.length-1;j++){
names[i]=names[i+1];
flag =true;
}
}
}

return flag;
}
public void showDeleteName(){
for(int i =0;i<names.length;i++){
if(names[i]!=null){
System.out.println(names[i]);
}
}
}
}

public class TestDelete {


public static void main(String[] args) {
Delete del = new Delete();
Scanner input = new Scanner(System.in);
System.out.println("请输入要删除的名字");
String oldName=input.next();
boolean flag = del.DeleteName(oldName);
del.showDeleteName();
}

}


加入我输入 :张三
为什么结果是 李四李四 王五 赵六 田七

求高人指点。
关于数组删除这方面有何方法。
...全文
162 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolbamboo2008 2014-01-15
  • 打赏
  • 举报
回复
public void showDeleteName(){ for(int i =0;i<names.length;i++){ if(names[i]!=null){ System.out.println(names[i]); } } } 这里面不是输出剩下的名字吗,和你的想法是一致的 至于出现两个“李四”,和你这段代码有关: if(oldName.equals(names[i])){ for(int j =i;j<names.length-1;j++){ names[i]=names[i+1]; flag =true; } } for循环里,你的names[i]=names[i+1];只是执行了若干次,但i的值没有变化,自己再看看
insists 2014-01-15
  • 打赏
  • 举报
回复
出现两个李四,是因为找到需要删除的名字的时候,只是把后一个值赋值当前索引位置的值, if(oldName.equals(names[i])){ for(int j =i;j<names.length-1;j++){ names[i]=names[i+1]; flag =true; } } 这个for没有效果,估计楼主是希望找到需要删除的名字之后,把后面的值都往前移,然后把删除的设置为null,LZ可以看下是不是这样的效果:
if(oldName.equals(names[i])){
				for(int j =i;j<names.length;j++){
					if (j<names.length-1) {
						names[j]=names[j+1];						
					} else {
						names[j] = null;
					}
					flag =true;
				}
			}
另外对于类似这种删除,个人比较喜欢新建一个相同长度的数组,然后把符合的值放入新数组,然后把新数组赋值给老数组

58,452

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧