2015-08-21 47 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 + " "); 
     } 
    }