2017-08-31 8 views
1
Scanner sc=new Scanner(System.in); 
int i=0; 
int nr = sc.nextInt(); 

int[] arr=new int[5]; 
while (i<arr.length || arr[i] < 11){ 
    System.out.println("Enter "+i+" index of array: "); 
    int j = 0; 
    if (arr[i]==arr[j]) { 
     arr[i]=sc.nextInt(); 
     i++; 
    } 
} 
System.out.println(Arrays.toString(arr)); 

2回繰り返されない値を値11に渡すことはできません。そうしないと、再度ユーザーに尋ねることはできません。Javaが重複しないレコードを持つ配列を埋め込む

+0

ソート選択肢を提供するように更新。他の部分は 'if(arr [i]> 11)のようになり、スキップする必要があります。 –

+0

配列を使用すると、['Arrays.binarySearch'](https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#binarySearch(int []、%20int))があります。 。統一のために、 'Map'も使うことができます。しかし、私はこれが5つの項目のために必要であるとは思わない...あなたは毎回自分自身を繰り返すことができます;) – AxelH

+0

誰でも働くコードで私を助けてくれてありがとう! – User2333

答えて

1
public static void main(String... args) { 
    Integer[] arr = new Integer[5]; 
    Scanner sc = new Scanner(System.in); 
    for (int j = 0; j < arr.length;) { 
     System.out.println("Enter a number less than 11."); 
     Integer i = sc.nextInt(); 
     if (i < 11 && !Arrays.stream(arr).anyMatch(a -> a == i)) { 
      arr[j] = i; 
      j++; 
     } 
    } 
    System.out.println("type 1 for ascending and 2 for descending order"); 
    int choice = sc.nextInt(); 
    if (choice == 1) 
     Arrays.sort(arr); 
    else if (choice == 2) 
     Arrays.sort(arr, Collections.reverseOrder()); 
    System.out.println(Arrays.toString(arr)); 
} 

このコードでは、作業を行い、それがスケールアップする場合は、既存の要素の検索は、おそらく5つの要素のためのやり過ぎですが、便利。また、このコードはJava 7では動作しませんので注意してください。コードが何をしているのかを明確にする必要がある場合は、尋ねてください。

EDIT: コードあなたは、その値が配列中に存在していないことを確認するために、検索技術を使用する必要があり

+0

私はあなたの答えとして既にマークしていますが、最後の質問を1つお願いします。このascをどのように並べ替えることができますか? – User2333

+0

あなたはアウトプットまたは合計で意味しますか? – XtremeBaumer

+0

チェック後の出力は、重複を削除した後にどのようにソートするかをユーザに尋ねます – User2333

-1

コードは次のとおりです。配列のサイズを3から変更し、コードを試すことができます。

ご不明な点がございましたら、お気軽にお問い合わせください。

public class test { 
    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     int[] arr = new int[3]; 
     int counter = 0; 
     while (true) { 
      System.out.println("Enter a number less than 11."); 
      int i = sc.nextInt(); 
      if (i < 11 && notFound(i, arr)) { 
       arr[counter] = i; 
       counter++; 
      } 
      if (counter == arr.length) 
       break; 
     } 
     System.out.println(Arrays.toString(arr)); 
    } 

    private static boolean notFound(int num, int[] arr) { 
     for (int i = 0; i < arr.length; i++) { 
      if (num == arr[i]) 
       return false; 
     } 
     return true; 
    } 
} 
+0

申し訳ありませんが重複していない場合は、配列に挿入するように頼んでいます – User2333

+0

このプログラムは、11より大きい値を挿入する場合、または配列に既に存在する場合はその値を挿入しませんそれ以外の場合はそれを挿入します、これは私の理解によるとあなたの要件だけでした。 –

関連する問題