【问题标题】:Pulling distinct values from a array in java从java中的数组中提取不同的值
【发布时间】:2014-10-31 17:01:25
【问题描述】:

有一个程序,用户将 10 个 int 值输入到数组中。最后,我需要提取不同的值并显示它们。添加了我的第二个 for 循环,它将确定值是否不同(即,如果数字出现多次,则它只显示一次)。

例如,假设我传入数字:1、2、3、2、1、6、3、4、5、2 不同的数组应该只包含数字 {1、2、3、6、4 , 5}

import java.util.Scanner;
import java.io.*;

public class ArrayDistinct {
 public static void main(String[] args) throws IOException {

 Scanner input = new Scanner(System.in);

 // Create arrays & variables  
 int arrayLength = 10;
 int[] numbers = new int[arrayLength];
 int[] distinctArray = new int[arrayLength];
 int count = 0;

 System.out.println("Program starting...");
 System.out.print("Please enter in " + numbers.length + " numbers: ");

 for (int i = 0; i < numbers.length; i++) {
  numbers[i] = input.nextInt();
 }

 for (int i = 0; i < numbers.length; i++) {
  int temp = numbers[i];
  int tempTwo = numbers[i + 1];

  if (tempTwo == temp) {
   count++;
   distinctArray[i] = temp;
  }
 } 

 // Print out results

} // end main
} // end class

【问题讨论】:

  • 什么是“不同的”值?我想你是在假设我们有一些先验知识。请更好地解释您的问题。
  • 考虑使用只允许唯一值的集合...
  • @brso05 我猜这是作业;他还没有去Sets。

标签: java arrays unique


【解决方案1】:

试试这个:

Set<Integer> uniqueNumbers = new HashSet<Integer>(Arrays.asList(numbers));

uniqueNumbers 将只包含唯一值

【讨论】:

  • 如果我不想对数据进行排序怎么办?
【解决方案2】:

Java 8

distinct()

返回由不同元素组成的流(根据 此流的 Object.equals(Object))。对于有序流, 不同元素的选择是稳定的(对于重复的元素, 在遭遇顺序中最先出现的元素被保留。)对于 无序流,不保证稳定性。

代码:

   Integer[] array = new Integer[]{5, 10, 20, 58, 10};
   Stream.of(array)
         .distinct()
         .forEach(i -> System.out.print(" " + i));

输出:

5,10,20,58

Read More About distinct function

【讨论】:

【解决方案3】:

试试这个代码..它会工作

package Exercises;
import java.util.Scanner;
public class E5Second
{
    public static void main(String[] args) 
    {
        Scanner In = new Scanner(System.in);
        int [] number = new int [10];
        fillArr(number);

        boolean [] distinct = new boolean [10];

        int count = 0; 
        for (int i = 0; i < number.length; i++) 
        {
            if (isThere(number,i) == false)
            {
                distinct[i] = true;
                count++;
            }
        }
        System.out.println("\nThe number of distinct numbers is  " + count);
        System.out.print("The distinct numbers are: ");
        displayDistinct(number, distinct);
    }
    public static void fillArr(int [] number)
    {
        Scanner In = new Scanner(System.in);
        System.out.print("Enter ten integers ");
        for (int i = 0; i < number.length; i++)
            number[i] = In.nextInt();
    }
    public static boolean isThere(int [] number, int i)
    {
        for (int j = 0; j < i; j++)
            if(number[i] == number[j])
                return true;
        return false;
    }
    public static void  displayDistinct(int [] number, boolean [] distinct)
    {
        for (int i = 0; i < distinct.length; i++)
            if (distinct[i]) 
                System.out.print(number[i] + " ");
    }
}

【讨论】:

    【解决方案4】:

    一个可能的逻辑:如果您应该只对“唯一”数字进行排序,那么您需要在输入每个数字并添加到第一个数组时对其进行测试,然后遍历数组并查看它是否相等到任何已经存在的号码;如果没有,请将其添加到“唯一”数组中。

    【讨论】:

    • 用你所说的逻辑编辑了我的原始帖子..如果这不正确,可以解释我如何重写,而不给我答案
    • @Chewy 我对我的答案发表评论去那里它可以帮助你
    【解决方案5】:

    Java 中的集合不允许重复:

        Integer[] array = new Integer[]{5, 10, 20, 58, 10};
        HashSet<Integer> uniques = new HashSet<>(Arrays.asList(array));
    

    就是这样。

    【讨论】:

      【解决方案6】:

      这样的东西应该适合你:

           Scanner input = new Scanner(System.in);
      
           // Create arrays & variables  
           int arrayLength = 10;
           int[] numbers = new int[arrayLength];
           int[] distinctArray = new int[arrayLength];
           int count = 0;
           Set<Integer> set = new HashSet<Integer>();
      
           System.out.println("Program starting...");
           System.out.print("Please enter in " + numbers.length + " numbers: ");
      
           for (int i = 0; i < numbers.length; i++) {
               set.add(input.nextInt());
           }
      
           for(Integer i : set)
           {
               System.out.println("" + i);
           }
      

      这只会将唯一值添加到集合中。

      【讨论】:

        【解决方案7】:
        int a[] = { 2, 4, 5, 3, 3, 3, 4, 6 };
        int flag = 0;
        for (int i = 0; i < a.length; i++)
        {  
            flag = 0;
            for (int j = i + 1; j < a.length; j++)
            {
                if (a[i] == a[j])
                {
                    flag = 1;
                }
            }
        
            if (flag == 0)
            {
                System.out.println(a[i]);
            }
        }
        

        【讨论】:

        • 您能否扩展您的答案以包括解释为什么这对 OP 的要求有帮助?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-27
        • 2015-04-24
        • 2014-12-12
        相关资源
        最近更新 更多