0

ユーザーがメイン メソッドの配列に 5 つの整数値を入力するようにします。配列を別の関数に渡します。そこで、配列内の重複した値を確認します。重複が見つかった場合は、重複する整数を削除して -1 に置き換えます。処理された配列をメイン メソッドに出力します。値を -1 に置き換える方法はわかっていると思いますが、配列を再びメインに戻すにはどうすればよいですか。コードは次のとおりです。

 package methods;
import java.util.*;
public class remdup {
    public static void main (String[]args) {
    Scanner in = new Scanner (System.in);
    System.out.println("Enter 5 integers:  ");
    int [] x= new int [5];
    for (int i=0; i<5; i++) {
    x[i]=in.nextInt();
}
    check(x);
   // Insert method here 
}
    //Method check starts here...
    public static void check(int []y) {
      //  int pos = y[0];
        int len=y.length;
        int i=0;
        int j = i+1;
       for (i=0; i<len-1; i++) {
           for (j=i+1; j<len-1;j++ ) {
            if (y[i]==y[j]) {
                //how to replace numbers???
               y[i]=-1;
                System.out.println("Duplicate found");
            }
            }
        } 

    }
}
4

6 に答える 6

3

Set を使用して、既に持っている数字を追跡します。配列を反復処理し、セットに現在の位置の数値が含まれているかどうかを確認します。はいの場合: -1 に置き換えます。いいえの場合: セットに番号を追加します...

public static void check(int []y) {
    Set<Integer> foundNumbers = new HashSet<Integer>();

    for(int index = 0; index < y.length; index++) {
        if(foundNumbers.contains(y[index]) {
            y[index] = -1;
        } else {
            foundNumbers.add(y[index]);
        }
    }
}
于 2013-09-10T09:20:09.140 に答える
0

これは宿題なので、詳細には触れませんが、check関数を見ると、次のようになります。

public static void check(int []y) {
      //  int pos = y[0];
        int len=y.length;
        int i=0;
        int j = i+1;
       for (i=0; i<len-1; i++) {
            if (y[i]==y[j]) {
                //how to replace numbers???
                System.out.println("Duplicate found");
            }
        } 

    }

最初に 1 に設定していることに気付くでしょうがj、その値を決して更新していません。したがって、ループでは、各反復の最後にforの値を更新する必要があります。j

また、現在の番号を保持するループと、残りをチェックする別のループを含める必要があります。最後に、持っている値を上書きするには、次のように配列に書き込むだけですy[i] = -1

于 2013-09-10T09:16:02.873 に答える
0

このようにあなたの全体を変えてください

   import java.util.*;
    public class test1 {
        public static void main (String[]args) {
        Scanner in = new Scanner (System.in);
        System.out.println("Enter 5 integers:  ");
        int [] x= new int [5];
        for (int i=0; i<5; i++) {
        x[i]=in.nextInt();
    }
        int z[]=check(x);
        for(int o=0;o<z.length;o++)
        {
            System.out.println(z[o]);
        }
       // Insert method here 
    }
        //Method check starts here...
        public static int[] check(int []y) {
          //  int pos = y[0];
            int len=y.length;
            int i=0;
            //int j = i+1;
           for (i=0; i<len; i++) {
               for(int j=0;j<i;j++)
               {
                if (y[i]==y[j]) {
                    //how to replace numbers???
                    y[i]=-1;
                   // System.out.println("Duplicate found");
                }
            } }
           for(int k=0;k<len;k++)
           {
               //System.out.println(y[k]);
           }
return y;
        }

}
于 2013-09-10T09:17:40.710 に答える
0

これはあなたのために働くでしょう。

    public static void main(String[] args){
    Scanner in = new Scanner (System.in);
    System.out.println("Enter 5 integers:  ");
    Map<Integer,Integer> map=new HashMap<>();
    int [] x= new int [5];
    for (int i=0; i<5; i++) {
        int val=in.nextInt();
        x[i]=val;
        Integer iniVal=map.get(val);
        if(iniVal==null){
             iniVal=0;
        }
        map.put(val,iniVal+1);
    }
    int[] y=getNewArr(x,map);
    for (int i=0;i<y.length;i++){
        System.out.println(y[i]);
    }
}
public static int[] getNewArr(int[] x,Map<Integer,Integer> map){
    for(int i=0;i<x.length;i++){
        int numElement=map.get(x[i]);
        if(numElement!=1){
          for(int j=0;j<i;j++){
             if(x[i]==x[j]){
                    x[i]=-1;
             }
          }
        }
    }
     return x;
}

入力配列:{1,4,5,1,2}

出力配列:{1,4,5,-1,2}

于 2013-09-10T09:35:31.697 に答える
0

配列内の番号を次のように置き換えます。

y[i] = -1;

しかし、チェック機能はこのようには機能しません。

于 2013-09-10T09:15:37.987 に答える
0

これは非常に古い投稿ですが、受け入れられた回答に誤りがあると思います。置き換えた数値を配列に追加し直す必要があります。ただし、受け入れられた回答では、-1 に置き換えていますが、SET に追加し直すことはありません。以下は私の修正されたソリューションです:

    public static Set<Integer> check(int []y) {
        Set<Integer> foundNumbers = new HashSet<Integer>();
    
        for(int index = 0; index < y.length; index++) {
            if(foundNumbers.contains(y[index])){
                y[index] = -1;      
               
            } 
            
            foundNumbers.add(y[index]);
        }
         return foundNumbers;
        
    }
于 2022-02-09T03:45:09.150 に答える