2015-08-21 42 views
3

我試圖解決這個問題:「寫一個程序讀取十個數字並顯示一個空格分開的不同數量和不同數字的號碼」爪哇 - (打印不同數字)

我的代碼此刻並不保存所有不同的數字,並且在時間上反覆顯示0.如果任何人都可以看到我的邏輯出了什麼問題,那麼任何提示都會有所幫助。謝謝!

public class PracticeProject 
{ 
public static void main(String args[]) 
{ 
    int[] number = new int[10]; 
    int[] counter = new int[10]; 
    int numcounter = 0; 

    numGen(number); 
    numcounter = distNum(number, counter, numcounter); 
    dispDist(counter, numcounter); 
} 

public static void numGen(int[] number) 
{ 
    Random rand = new Random(); 

    for (int i = 0; i < number.length; i++) 
    { 
     number[i] = rand.nextInt(10); 
     System.out.print(number[i] + " "); 
    } 

    System.out.println(); 
} 

public static int distNum(int[] number, int[] counter, int numcounter) 
{ 
    for (int i = 0; i < number.length; i++) 
    {   
     for (int j = 0; j <= i; j++) 
     { 
      if (counter[j] == number[i]) 
      { 
       break; 
      } 

      if (j == i) 
      { 
       counter[j] = number[i]; 
       numcounter++; 
      } 
     } 
    } 
    return numcounter; 
} 

public static void dispDist(int[] counter, int numcounter) 
{ 
    for (int i = 0; i < numcounter; i++) 
    { 
     System.out.print(counter[i] + " "); 
    } 
} 

}

+0

創建使用您輸入的數字陣列地圖 – SacJn

+0

請隨意走進'設置',其中只保留不同 –

+0

您可以使用set此外,如果不想存儲頻率 – SacJn

回答

5

問題是與在distNum()方法的邏輯,這是不正確地從所述輸出陣列中刪除所有重複。嘗試使用這個版本來代替:

public static int distNum(int[] number, int[] counter, int numcounter) { 
    for (int i = 0; i < number.length; i++) { 
     boolean isUnique = true; 
     for (int j = 0; j < numcounter; j++) { 
      if (counter[j] == number[i]) { 
       isUnique = false; 
       break; 
      } 
     } 
     if (isUnique) { 
      counter[numcounter] = number[i]; 
      numcounter++; 
     } 
    } 
    return numcounter; 
} 

我走過的隨機數的數組,併爲每一個我掃描counter,看是否已經遇到值。如果它是重複的,那麼它不會被添加到唯一列表中。

這個方法和其他原始代碼一起使用IntelliJ進行了測試,它似乎工作正常。

0

嘗試把下面的函數....使用哈希圖...鍵將是沒有。價值將是它發生的時間。

public void duplicate(int[] a) { 

    HashMap<Integer, Integer> h = new HashMap<Integer, Integer>(); 
    for (int i = 0; i < a.length; i++) { 
     Integer j = (int) h.put(a[i], 1); 
     if (j != null) {   // checking if already in hashmap 
      h.put(a[i], j + 1); // if there then incrementing value 
     } 

    } 

    Iterator it = h.entrySet().iterator(); // displaying value you can have you logic here 
    while (it.hasNext()) { 
     Map.Entry pair = (Map.Entry) it.next(); 
     System.out.println(pair.getKey() + " = " + pair.getValue()); 
     it.remove(); // avoids a ConcurrentModificationException 

    } 
} 
0

如果使用array存儲你的櫃檯,你需要設置默認值,否則,如果陣列有多個0,它通過區分相等。因爲int array默認值是

並且您可以使用listvector來存儲您的counters

public static void main(String args[]) { 
     int[] number = new int[10]; 
     int[] counter = new int[10]; 
     List<Integer> counters = new ArrayList<Integer>(); 
     int numcounter = 0; 

     numGen(number); 
     numcounter = distNum(number, counters, numcounter); 
     dispDist(counters, numcounter); 
    } 

    public static void numGen(int[] number) { 
     Random rand = new Random(); 

     for (int i = 0; i < number.length; i++) { 
      number[i] = rand.nextInt(10); 
      System.out.print(number[i] + " "); 
     } 

     System.out.println(); 
    } 

    public static int distNum(int[] number, List<Integer> counters, int numcounter) { 
     for (int i : number) { 
      if (!counters.contains(i)){ 
       counters.add(i); 
      } 
     } 
     return numcounter; 
    } 

    public static void dispDist(List<Integer> counter, int numcounter) { 
     for (Integer i : counter) { 
      System.out.print(i + " "); 
     } 
    }