2016-11-27 2 views
1

10から100までの整数を1次元配列に入力したいのですが、その値が配列内のどこにも存在する場合は、アレイに挿入しますが、5つの一意の番号が追加されるまで、ユーザーに通知して入力を再開します。配列内の値を検索し、それが存在しない場合に格納する

ここに私のコードです。私はそれが正しくないことを知っていますが、私は何をしようとしているのか分かりませんが、単純なforループと数字を取得して配列に格納し、複製を検索する検索方法を使用しています。私のコードで私の問題は、私が 'search'メソッドに送る必要のある変数 'key'として入力した番号を設定することができないということです。

// input an integer between 10 and 100, add to array and print results. if value is already in array, notify user, print array. keep adding to array until 5 unique values have been entered 

import java.util.Scanner; 

public class ArraySearch { 
    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 

     int[] list = new int[5]; 

     for (int i = 0; i < list.length; i++) { 
      System.out.println("Enter number: "); 
      list[i] = input.nextInt(); 
     } 
     int count = search(list, key); 
     System.out.println("It has been entered."); 
    } 

    public static int search(int[] list, int key) { 

     int count = 0; 
     for (int i = 0; i < list.length; i++) { 
      if (list[i].equals(key)) { 
       ; 
      } 
      count++; 
     } 
     return (count); 
    } 
} 

答えて

0

入力を直接アレイに保存しています。
入力をsearchに渡す一時変数に保存します。 searchの結果に基づいて、配列に追加するか、別の入力を求めるプロンプトが表示されます。

int[] list = new int[5]; 

for (int i = 0; i < list.length; i++) { 
    System.out.println("Enter number: "); 
    int temp = input.nextInt(); 
    if(search(list,temp) == 0) 
     list[i] = temp; 
    }else{ 
     System.out.println("It has been entered."); 
     i--; 
    } 
} 
1

配列の単純な例。代替データ構造のリストセットで改善することができました。

search()メソッドは実質的にwhile()ループ内に含まれています。つまり、for()ループの例では既にターゲット番号の検索が含まれています。

int c = 0;は、ループの前に宣言され、5つの一意の番号を確実に見つけます。

import java.util.Arrays; 
import java.util.Scanner; 

public class ArraySearch { 
    public static void main(String[] args) { 
     Scanner s = new Scanner(System.in); 
     int[] list = new int[5]; 
     int c = 0; 
     System.out.println("Enter number: "); 
     while (c < 5 && s.hasNext()) { 
      int n = s.nextInt(); 
      boolean has = n >= 10 && n <= 100; 
      for (int i = 0; i <= c && !has; ++i) 
       if (list[i] == n) 
        has = true; 
      if (!has) { 
       System.out.println("It has been entered."); 
       list[c++] = n; 
      } 
     } 
     System.out.println("Result = " + Arrays.toString(list)); 
     s.close(); 
    } 
} 

代替バージョン:search()

public class App { 
    public static void main(String[] args) { 
     Scanner s = new Scanner(System.in); 
     int[] list = new int[5]; 
     for (int i = 0; i < 5; i++) { 
      System.out.println("Enter number: "); 
      int n = s.nextInt(); 
      if ((n >= 10 && n <= 100) && search(list, n) == 0) { 
       list[i] = n; 
       System.out.println("It has been entered."); 
      } else 
       i--; 
     } 
     System.out.println("Result = " + Arrays.toString(list)); 
     s.close(); 
    } 

    public static int search(int[] list, int key) { 
     int count = 0; 
     for (int i = 0; i < list.length; i++) { 
      if (list[i] == key) { 
       count++; 
      } 
     } 
     return count; 
    } 
} 

Editを使用してさらに

import java.util.HashSet; 
import java.util.Scanner; 
import java.util.Set; 

public class ArraySearch { 
    public static void main(String[] args) { 
     Scanner s = new Scanner(System.in); 
     Set<Integer> set = new HashSet<Integer>(5); 
     int c = 0; 
     System.out.println("Enter number: "); 
     while (c < 5 && s.hasNext()) { 
      int n = s.nextInt(); 
      if ((n < 10) || (n > 100) || !set.add(n)) 
       continue; 
      else { 
       System.out.println("It has been entered."); 
       c++; 
      } 
     } 
     System.out.println("Result = " + set); 
     s.close(); 
    } 
} 

、:また10-100の仕様を追加しました

EDIT2:検索して、あなたのアプローチを使用して()方法

+0

ありがとう、それは私の頭の上にビットですが、私はこれらを介して動作することができ、そこに答えがあると信じています。とても有難い! – becs

+0

ようこそ。ご不明な点がございましたら、お気軽にお問い合わせください。注意:検索メソッドを使用するサンプルコードの3番目のブロックでは、forループを5つの数字が使用されるまで続けるために、 'i - ;'を使用して 'i' int変数を1ずつリセット/減少させます。数値が入力されていないときに 'i - ;'が使用されなかった場合、forループは5回繰り返した後に停止します(たとえば、5つの数字は正しく入力されませんが、プログラムは見えなくなります) –

+0

私が間違っていたところです。私は今日のコードに取り組んでいたので、助けてくれてありがとうございました。私はそれを落とすのではなく、カウンターを増やし続けました。 – becs

関連する問題