删除数组然后显示整个数组

时间:2013-11-19 21:37:27

标签: java arrays

该计划的主要目标是

- 显示所有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

请帮忙......

2 个答案:

答案 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}},这实际上是数组末尾的垃圾值。