无法在此数组程序中执行插入和删除。请给出建议。只有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;
}
}
您的代码有不同的故障点,不确定我会全部抓住它们:
- 您在删除中的前循环被打破;我敢肯定,您再次提出
for (int y=0; y<Arr.length; y++)
。使用for (int y :Arr)
,您将y分配给ARR的所有元素,一个接一个。 - x应该是应删除的元素。那我不知道为什么您会在删除末尾减少x。您必须创建一个较少元素的新数组。
- 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);
}
}
}
}