问题是找到数组中数字的不同出现次数,以便出现两次的任何元素仅打印一次。
public class ICT_Qoestions_34 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter the Index of Numbers");
int n = input.nextInt();
int[] myList = RandomNumber(n);
System.out.println("Distinct Numbers"); here I called a method that has a parameter of arrays coming from the RandomNumber() method.
DistinctNumbers(myList);
}
// Generating Random Numbers And Pouplating them in an Array whose Rerference is myList
//Question 1
public static int[] RandomNumber(int n) {
if (n < 0) {
System.out.println("PLEASE Enter Positive Number!");
}
int[] myList = new int[n];
for (int i = 0; i < n; i++) {
int Values = (int) ((90 * Math.random()) + 10);
System.out.print(Values + "\t");
for (int j = i; j < n; j++) {
myList[j] = Values;
}
}
return myList;
}
上述方法运行良好,并生成一个包含 n 个索引随机数的数组。
问题出现在这个方法中,因为它没有完成我期望的工作,而且我无法追踪我的错误。
public static void DistinctNumbers(int[] myList) {
for (int j = 0; j < myList.length; j++) {
int key = myList[j];
int Occurance = 1;
for (int i = 0; i < myList.length; i++) {
if (myList[i] == myList[j] && i != j)
Occurance++;
}
如果一个数字的出现次数为=1,没问题,但是当它>1时,我们应该小心,因为我们的订单只打印一次。所以我这样做了......
if (Occurance== 1)
System.out.println(myList[j] + "\t");
else if(Occurance>1){
for (int k=0; k<j;k++){
如果第 j 个索引之前的数组元素与第 j 个索引的元素匹配,我们将中断循环以避免控制台中的任何重复打印。
if (myList[k]==key)
break;
else if(myList[k]!=key){
如果数组的元素直到第 j 个索引都与第 j 个索引的元素不匹配,我们打印该不同的数字,然后中断循环以避免在控制台中重复打印。我相信这是有效的,因为如果在第 3 个和第 15 个索引中找到示例 15,则将打印第三个索引并跳转到第 15 个索引。
System.out.println(myList[j] + "\t");
break;
}
}
}
}
}
}
但这似乎不是结果,我追踪时什么也没发现......
最佳答案
那么你应该考虑稍微改变一下你的算法。具有出现次数的 For 循环不起作用。你最好的方法是检查生成的随机数是否存在于数组中。
while(isElementExist(generatedNum,arr)) {
generatedNum = (int) ((90 * Math.random()) + 10);
}
// insert into array now.
关于java - 我在打印数组中的元素时遇到问题,以便任何两个重复的元素出现一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59642790/