无法在此Java程序中执行插入和删除ArrayoutofBound错误



无法在此数组程序中执行插入和删除。请给出建议。只有find()正在工作。

我尝试了一个temp [],将ARR []复制到Temp []

完整代码在这里

public boolean find(int x,int Arr[]){
    for (int y=0;y<Arr.length;y++)
    {
        if(Arr[y]==x) {
            System.out.println(" Found , At Position : " + y);
            return true;
        }       
    }
    System.out.println(" Not Found");      
    return false;
}
public void delete (int x,int Arr[]){
    for (int y :Arr)
    {
        if(Arr[y]==x)
        {
              for (int n=y;n<x;n++)
              {
                  Arr[n]=Arr[n+1];
                  System.out.println("Deleted.");
              }
              x--;
        }
    }
}
public void insert(int x,int Arr[]){
    int temp[]=new int[Arr.length + 1];
    for (int y=0;y<Arr.length;y++)
    {
        temp[y]=Arr[y];
    }
    temp[Arr.length]=x;
    Arr=temp;
}

这是代码::您以错误的方式用于循环。首先,您应该首先查看循环工作的扩展是:https://www.cis.upenn.edu/~matuszek/general/general/javasyntax/enhance-for-loops.html

import java.util.Arrays;
class GfG {
    public static void main(String[] args) {
        System.out.println();
        int[] Arr = { 1, 2, 3, 4 };
        insert(2, Arr);
        Arr = delete(30, Arr);
        System.out.println(Arrays.toString(Arr));
    }
    public static boolean find(int x, int Arr[]) {
        for (int y = 0; y < Arr.length; y++) {
            if (Arr[y] == x) {
                System.out.println(" Found , At Position : " + y);
                return true;
            }
        }
        System.out.println(" Not Found");
        return false;
    }
    public static int[]  delete(int x, int Arr[]) {
        int [] temp = Arr;
        for (int i = 0; i < Arr.length; i++) {
            if (Arr[i] == x) {
                for (int j = i; j < Arr.length - 1; j++) {
                    Arr[j] = Arr[j + 1];
                }
                temp = Arrays.copyOfRange(Arr, 0, Arr.length-1);
                break;
            }
        }
        return temp;
    }
    public static void insert(int x, int Arr[]) {
        int temp[] = new int[Arr.length + 1];
        for (int y = 0; y < Arr.length; y++) {
            temp[y] = Arr[y];
        }
        temp[Arr.length] = x;
        Arr = temp;
    }
}

您的代码有不同的故障点,不确定我会全部抓住它们:

  1. 您在删除中的前循环被打破;我敢肯定,您再次提出for (int y=0; y<Arr.length; y++)。使用 for (int y :Arr),您将y分配给ARR的所有元素,一个接一个。
  2. x应该是应删除的元素。那我不知道为什么您会在删除末尾减少x。您必须创建一个较少元素的新数组。
  3. java使用通过参考来调用,而不是按值来调用。因此,将X分配给ARR中的添加不会更改调用方法的变量。您必须返回新数组,而呼叫者必须使用此数组。

希望这有所帮助...

我使用了此征用。

import java.io.*;
import java.util.*;
interface ArrayOperation {
boolean find(int x,int Arr[]);
int[] delete(int x,int Arr[]);
int[] insert(int x,int Arr[]);
}
class ArrayExample implements ArrayOperation {
public boolean find(int x,int Arr[]){
    for (int y=0;y<Arr.length;y++)
    {
        if(Arr[y]==x) {
            System.out.println(" Found , At Position : " + y);
            return true;
        }
    }
System.out.println(" Not Found");
return false;}
public int[] delete (int x,int Brr[]){
     int temp[]=new int[Brr.length-1];
    for (int y=0;y<Brr.length;y++){
        if(Brr[y]==x){
              for (int n=y;n<Brr.length-1;n++){
                Brr[n]=Brr[n+1];
                System.out.println("Deleted.");
               }
               for (int k=0;k<temp.length;k++){
                temp[k]=Brr[k];
               }
        }

    }   
return temp;
}
public int [] insert(int x,int Brr[]){
    int temp[]=new int[Brr.length + 1];
    for (int y=0;y<Brr.length;y++){
        temp[y]=Brr[y];
    }
    temp[Brr.length]=x;
    return temp;
}
}

public class ArrayCreateFindDeleteInsert{
 public static void main (String args[]){
 System.out.println("Enter the size of Array :");
 Scanner in = new Scanner(System.in);
 int x=in.nextInt();
 System.out.println("You Choose Size : " + x);
 int Arr[]=new int[x];
 ArrayExample A = new ArrayExample();
 System.out.println("Enter Elements");
 for(int y=0;y<Arr.length;y++){
     int z=in.nextInt();
     Arr[y]=z;
 }
 while(true){
 System.out.print("Your Array : ");
 for(int y=0;y<Arr.length;y++){
     System.out.print(Arr[y]+" ");
     }
 System.out.println("nSelect an operation : ");
 System.out.println("1. Find : ");
 System.out.println("2. Delete : ");
 System.out.println("3. Insert : ");
 System.out.println("4. Quit : ");
 int p=in.nextInt();
 switch(p){
    case 1: System.out.print("Enter Element: ");
            int t=in.nextInt();
            System.out.print(t);
            A.find(t,Arr);
            break ;
    case 2: System.out.print("Enter Element: ");
            int u=in.nextInt();
            while(A.find(u,Arr)==true){
            Arr=A.delete(u,Arr);
            }
            break ;
    case 3: System.out.print("Enter Element: ");
            int v=in.nextInt();
            System.out.print(v);
            Arr=A.insert(v,Arr);
            System.out.print(" Inserted.");
            break ;
    case 4:
             System.exit(0);
 }
 }
 }
 }

最新更新