查找数组中值的出现

时间:2018-02-20 22:28:51

标签: java

我的问题是如何找到数字的频率" 8"和" 88"在这个数组中,使用一种方法。似乎我在评估者方法中所做的似乎不起作用。例如,如果" 8"在数组中出现三次输出将是" 3"对于" 88"同样如此。 如果我错了,请指出正确的方向。任何有关我的问题的帮助都非常感谢。

import java.util.Random;

public class ArrayPractice {
private int[] arr;
private final int MAX_ARRAY_SIZE = 300;
private final int MAX_VALUE = 100;

public ArrayPractice() {
// initialize array
arr = new int[MAX_ARRAY_SIZE];

// randomly fill array with numbers
Random rand = new Random(1234567890);
for (int i = 0; i < MAX_ARRAY_SIZE; ++i) {
  arr[i] = rand.nextInt(MAX_VALUE) + 1;
   }
}


public void printArray() {
for (int i = 0; i < MAX_ARRAY_SIZE; ++i) 
  System.out.println(arr[i]);
}


public int countFrequency(int value) {
for (int i : MAX_VALUE ) {
if (i == 8)
 i++;
}



public static void main(String[] args) {
ArrayPractice ap = new ArrayPractice();

System.out.println("The contents of my array are: ");
ap.printArray();
System.out.println("");

System.out.println("The frequency of 8 is: " + ap.countFrequency(8));
System.out.println("The frequency of 88 is: " + ap.countFrequency(88));

      }
   }
}

4 个答案:

答案 0 :(得分:1)

当元素与arr匹配时,您需要迭代value并递增变量。

public int countFrequency(int value) {
    int count = 0;
    for (int num : arr) {
        if (num == value) {
            count++;
        }
    }
    return count;
}

答案 1 :(得分:0)

解决方案:

public int countFrequency(int value) {
    int counter = 0; // here you will store counter of occurences of value passed as argument
    for (int i : arr) { // for each int from arr (here was one of your errors)
        if (i == value) // check if currently iterated int is equal to value passed as argument
            counter++; // if it is equal, increment the counter value
    }
    return counter; // return the result value stored in counter
}

说明:

代码中的主要问题是countFrequency()方法,如果要使其正常工作,则需要更改的错误很少:

  1. 你传递了value作为参数,你甚至没有在方法体中使用它。

  2. for (int i : MAX_VALUE ) - 你想迭代arr数组的元素,(你可以读它:对于arr数组中的每个int,执行以下操作:{...}。

  3. if (i == 8) i++ - 在这里你说的是这样的:检查数组中的当前元素(假设你的意思是MAX_VALUE是一个数组)是否等于8,如果是 - 将此值增加1(所以如果它是8,现在它是9)。你的意图是增加counter,计算8的出现次数。

  4. 您可能需要考虑对countFrequency()方法进行这些改进,以使其正常工作。

答案 2 :(得分:0)

您有一个硬编码的种子,因此您的随机值在不同的运行中不会是随机的。您还要将频率计数硬编码为8(而不是value)。但老实说,我建议你用lambdas重新访问这段代码(从Java 8开始),它们可以用更少的代码编写数组生成,打印和计数例程。像,

public class ArrayPractice {
    private int[] arr;
    private final int MAX_ARRAY_SIZE = 300;
    private final int MAX_VALUE = 100;

    public ArrayPractice() {
        // randomly fill array with numbers
        Random rand = new Random();
        arr = IntStream.generate(() -> rand.nextInt(MAX_VALUE) + 1)
                .limit(MAX_ARRAY_SIZE).toArray();
    }

    public void printArray() {
        IntStream.of(arr).forEachOrdered(System.out::println);
    }

    public int countFrequency(int value) {
        return (int) IntStream.of(arr).filter(i -> i == value).count();
    }
}

答案 3 :(得分:0)

当元素与i

匹配时,您需要迭代数组并递增计数器变量

你正在做的是增加i而不是计数器:

if (i == 8)
  i++;
}     // if i is 8 then i becomes 9 

一个工作示例:

public int countFrequency(int i) {
int count = 0;
for (int num : arr) {
    if (num == i) {
        count++;
    }
}
return count;
}