如何在没有其他数组的情况下创建数组?

时间:2015-07-28 00:45:29

标签: java arrays

我正在尝试使用两个数组创建代码。除最小数字外,第二个数组具有与第一个数据相同的值。我已经编写了一个代码,其中z是最小的数字。现在我只想制作一个没有z的新数组,任何反馈都会受到赞赏。

public static int Second_Tiny() {
    int[] ar = {19, 1, 17, 17, -2};
    int i;
    int z = ar[0];

    for (i = 1; i < ar.length; i++) {
        if (z >ar[i]) {  
            z=ar[i];  
        }                   
    }
}

3 个答案:

答案 0 :(得分:4)

Java 8流内置了可以实现您想要的功能。

for i in range(1,n):
    print (int(i*((10**i)-1)/9))

结果:

public static void main(String[] args) throws Exception {
    int[] ar = {19, 1, 17, 17, -2, -2, -2, -2, 5};

    // Find the smallest number
    int min = Arrays.stream(ar)
            .min()
            .getAsInt();

    // Make a new array without the smallest number
    int[] newAr = Arrays
            .stream(ar)
            .filter(a -> a > min)
            .toArray();

    // Display the new array
    System.out.println(Arrays.toString(newAr));
}

否则,你会看到类似的东西:

[19, 1, 17, 17, 5]

结果:

public static void main(String[] args) throws Exception {
    int[] ar = {19, 1, 17, 17, -2, -2, -2, -2, 5};

    // Find the smallest number
    // Count how many times the min number appears
    int min = ar[0];
    int minCount = 0;
    for (int a : ar) {
        if (minCount == 0 || a < min) {
            min = a;
            minCount = 1;
        } else if (a == min) {
            minCount++;
        }
    }

    // Make a new array without the smallest number
    int[] newAr = new int[ar.length - minCount];
    int newIndex = 0;
    for (int a : ar) {
        if (a != min) {
            newAr[newIndex] = a;
            newIndex++;
        }
    }

    // Display the new array
    System.out.println(Arrays.toString(newAr));
}

答案 1 :(得分:2)

我认为OP在错误的轨道上看到了他的评论:

  

&#34;我试图找出数组ar []中的第二个最小整数。一世   一旦完成,我应该得到1的输出。我想要实现的方式   这是通过创建一个名为newar []的新数组并使其包含all   ar []的索引,除了没有-2。&#34;

这是解决此问题的非常低效的方法。你必须做3次传递,一次找到最小的索引元素,另一次传递去除元素(这是一个数组,所以删除一个元素将需要一个完整的传递),另一个传递来找到最小的一个。

你应该只做一次通过算法并跟踪最小的两个整数, 甚至更好地使用树来提高效率。以下是此问题的最佳答案:

Find the 2nd largest element in an array with minimum number of comparisons

Algorithm: Find index of 2nd smallest element from an unknown array

更新:这是符合OP要求的算法, 3次通过,没有外部库:

public static int Second_Tiny() {

  int[] ar = {19, 1, 17, 17, -2};

  //1st pass - find the smallest item on original array  
  int i;
  int z = ar[0];
  for (i = 1; i < ar.length; i++) {
    if (z >ar[i]){
      z=ar[i];
    }
  }

  //2nd pass copy all items except smallest one to 2nd array
  int[] ar2 = new int[ar.length-1];
  int curIndex = 0;
  for (i=0; i<ar.length; i++) {
    if (ar[i]==z)
      continue;
    ar2[curIndex++] = ar[i];
  }

  //3rd pass - find the smallest item again
  z = ar2[0];
  for (i = 1; i < ar2.length; i++) {
    if (z >ar2[i]){
      z=ar2[i];
    }
  }

  return z;
}

答案 2 :(得分:0)

这会抓取变量z中指定的元素的索引,然后将第二个数组设置为第一个数组减去该元素。

  

本质上,这给出了ar2 = ar1减去元素z

public static int Second_Tiny() {
    int[] ar = {19, 1, 17, 17, -2};
    int[] ar2;
    int i;
    int z = ar[0];
    int x = 0;

    for (i = 1; i < ar.length; i++) {
        if (z >ar[i]){  
            z=ar[i];
            x=i;  
        }                   
    }
    ar2 = ArrayUtils.remove(ar, x);
    return(z);    
}