2017-09-05 20 views
0

無法在此數組程序中執行插入和刪除。請給出建議。只有find()正在工作。無法執行插入和刪除在這個Java程序數組outoutofbound錯誤

我試過一個臨時[]複製編曲[],然後引用編曲[]來臨時[]

完整的代碼here

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; 
} 
+2

您認爲「(int y:Arr)'會做什麼?調試你的應用程序並檢查'y'的值。提示:這不是數組索引,所以我打賭你會在下面的'Arr [y] == x'中得到異常。也可以看一下'insert()',尤其是賦值'Arr = temp'。您是否期望該方法在該方法之外可見?如果是這樣,請重新訪問方法參數教程。 – Thomas

+0

對於方法insert(),請記住,在Java *中,所有*參數都是按值傳遞的,因此您需要找到另一種方法來更改Arr。 – DodgyCodeException

+0

這不像'javascript',它迭代了數組的索引。在Java中,你直接在'y'中獲取值。 – AxelH

回答

0

下面是代碼::你以錯誤的方式使用擴展的for循環。你應該首先看到如何擴展for循環工作在這裏是鏈接:https://www.cis.upenn.edu/~matuszek/General/JavaSyntax/enhanced-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; 

    } 
} 
0

你的代碼有不同的故障點,不知道我會抓住他們所有的:

  1. 你的循環刪除已損壞;我相信你再次回到for (int y=0; y<Arr.length; y++)。使用for (int y :Arr),您可以將y分配給Arr的所有元素,一個接一個。
  2. x應該是應該刪除的元素。然後我不知道爲什麼在刪除結束時減少x。你必須創建一個少一個元素的新數組。
  3. Java使用致電,而不是致電。因此,將x賦值給add中的arr不會更改調用方法的變量。你將不得不返回新的數組,調用者必須使用這個數組。

希望這有助於有點...

+0

您的意思是Java使用按值調用,而不是通過引用調用。 – DodgyCodeException

0

我用這個認識。

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); 

} 
} 
} 
} 
相關問題