该计划的主要目标是
- 显示所有20个阵列 - 提示用户输入要搜索的值 - 然后程序将搜索该值,如果找到,则取消释放字符串“found”,该值将被删除 - 然后它将显示新的数组 - 如果未找到则显示“未找到”字符串
继承人代码......
public class Trye {
public static void main(String[] args) throws IOException{
BufferedReader x=new BufferedReader(new InputStreamReader(System.in));
int z;
int num[]={11,22,33,44,55,66,77,88,99,12,13,14,15,16,17,18,19,21,23,34};
int items=num.length;
boolean found=false;
for(int a=0;a<items;a++){
System.out.print(num[a]+" ");
}
System.out.println(" ");
System.out.println("Enter Value YOu Want to search");
String search=x.readLine();
int searchId=Integer.parseInt(search);
for(z=0;z<items;z++){
if(num[z]==searchId)
{
found=true;
break;}}
if(found){
System.out.println("Found Value! "+searchId);
for(int c=z;c<items;c++){
num[c]=num[c+1];
items--;
}
for(int last=0;last<=items;last++){
System.out.print(num[last]+" ");
}
}
else{
System.out.println(searchId+" Not found");
}
}
}
和我的问题,当我输入数字11,22,33等时,数字被删除,但最后一个输出(删除后显示数组)只有10个元素(它应该是19个元素)。
如果我输入34(第20个元素),则输出变为OUtOfbounds:20
请帮忙......
答案 0 :(得分:0)
items--应该在for语句之外。 for也应该只去项目 - 。
答案 1 :(得分:0)
你应该在第一次for循环之前递减items
。此外,您的第二个for循环应该是<
,而不是<=
编辑:说明:
您目前正在for循环内递减items
。这会导致它减少太多次(我估计最多10次)。将它放在循环之前而不是之后的原因很简单:在循环内部,使用num[c+1]
,如果你要一直到items
20
的原始c+1
,会导致索引超出范围错误(20
将为<
)。
你的第二个for循环应该是num[19]
,这样就不会打印出{{1}},这实际上是数组末尾的垃圾值。