我试着写一个程序来确定一个数组中重复整数的数量和它们的计数,但是程序输出大致完全,所以我的问题是我的代码中的问题我不想使用任何类,谢谢。< / p>
例如:
输入: 输入数组大小:11 输入数组元素: 13 34 22 4 499 4 22 18 4 1 1 输出: 有3个重复的数字: 22:2次 4:3次 1:2次
但我的输出是:
1:2次 4:3次 4:2次 22:2次
import java.util.Scanner;
public class repeated_elements {
public static void main(String[] args) {
Scanner input = new Scanner (System.in);
// User Choose The Array Size
System.out.println("Enter Array Size: ");
int size = input.nextInt();
// The Array
int[]Array = new int[size];
// Read The Array Elements From The User
System.out.println("Enter Array Elements:");
for(int i =0; i<size; i++){
Array[i]=input.nextInt();
}
// Sorting The Array (Ascending Order)
for(int j = 0; j<size; j++){
int mini = Array[j];
int mini_index = j;
for(int i = j; i<size; i++){
if(Array[i] < mini){
mini = Array[i];
mini_index = i;
}
}
int tmp = Array[j];
Array[j] = Array[mini_index];
Array[mini_index] = tmp;
}
// Count The Repeated Numbers
for(int i=0; i<size; i++){
int key = Array[i];
int counter = 0;
for(int j=i; j<size; j++){
if(key == Array[j]){
counter++;
}
}
if(counter > 1 ){
System.out.println(Array[i]+":"+counter+" times ");
}
}
}
}
答案 0 :(得分:1)
而不是这段代码:
// Count The Repeated Numbers
for(int i=0; i<size; i++){
int key = Array[i];
int counter = 0;
for(int j=i; j<size; j++){
if(key == Array[j]){
counter++;
}
}
if(counter > 1 ){
System.out.println(Array[i]+":"+counter+" times ");
}
}
试试这个:
// Count The Repeated Numbers
for(int i=0; i<size; ){ //<--- note the removal of i++
int key = Array[i];
int counter = 0;
for(int j=i; j<size; j++){
if(key == Array[j]){
counter++;
}else{
i=j;
break;
}
}
if(counter > 1 ){
System.out.println(key+":"+counter+" times ");
}
}
问题是您没有同步i
和j
变量
所以输入如下:
1 1 1 1
你会得到
1:4
1:3
1:2
校正后,我测试了程序并输入:
11
13 34 22 4 499 4 22 18 4 1 1
我明白了:
1:2 times
4:3 times
22:2 times
编辑:
AS @CabelB建议。它同样值得看看Map
实施。
答案 1 :(得分:0)
如果我是你,我会用Map解决这个问题并在那里计数,但你的代码已经更正了:
公共类Rep {
public static void main(String[] args) {
int[] input = {1,1,2,2,2,0};
// User Choose The Array Size
System.out.println("Enter Array Size: ");
int size = input.length;
// The Array
int[]Array = new int[size];
// Read The Array Elements From The User
System.out.println("Enter Array Elements:");
for(int i =0; i<size; i++){
Array[i]=input[i];
}
// Sorting The Array (Ascending Order)
for(int j = 0; j<size; j++){
int mini = Array[j];
int mini_index = j;
for(int i = j; i<size; i++){
if(Array[i] < mini){
mini = Array[i];
mini_index = i;
}
}
int tmp = Array[j];
Array[j] = Array[mini_index];
Array[mini_index] = tmp;
}
// Count The Repeated Numbers
for(int i=0; i<size; i++){
int key = Array[i];
int counter = 0;
for(int j=0; j<size; j++){
if(key == Array[j]){
counter++;
}
}
if(counter > 0 ){
System.out.println(Array[i]+":"+counter+" times ");
}
}
}
}
答案 2 :(得分:0)
您的代码似乎没问题,但是对于一个小问题。当您输出出现次数时,无论是否之前已经检查过当前正在检查的值,您每次都要遍历整个数组。简而言之,对于[1,1,1,1,2,2,2,3,3]的输入数组,输出为1:4倍,1:3倍和1:2倍等等。
我认为您需要将不同的值与已排序的数组分开,或者至少确保不对已经计数的值重复计数。
答案 3 :(得分:0)
每次解析整个数组时,都必须跳过已解析的项目。
最后将i
计数器增加counter
值:
if(counter > 1 ){
System.out.println(Array[i]+":"+counter+" times ");
i +=counter;
}
这应该足够了,希望有所帮助
答案 4 :(得分:0)
当我们拿钥匙找到发生时,首先我们需要检查它是否已被搜索出现(例如.4)。所以我把密钥保存在数组中没有任何重复,然后开始搜索它。可以使用集合方法轻松完成..
public class RepeatedElements {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// User Choose The Array Size
System.out.println("Enter Array Size: ");
int size = input.nextInt();
// The Array
int[] Array = new int[size];
// Read The Array Elements From The User
System.out.println("Enter Array Elements:");
for (int i = 0; i < size; i++) {
Array[i] = input.nextInt();
}
// Sorting The Array (Ascending Order)
for (int j = 0; j < size; j++) {
int mini = Array[j];
int mini_index = j;
for (int i = j; i < size; i++) {
if (Array[i] < mini) {
mini = Array[i];
mini_index = i;
}
}
int tmp = Array[j];
Array[j] = Array[mini_index];
Array[mini_index] = tmp;
}
// System.out.println("sorted array:"+Arrays.asList(Array));
int key[] = new int[Array.length];
int keylen = 0;
// Count The Repeated Numbers
for (int i = 0; i < size; i++) {
int found = 0;
int k;
for ( k=0;k<keylen;k++){
if (key[k]==Array[i]){
found=1;
}
}
// 11 System.out.println("k value"+k+"i value"+i);
if (found==1)
continue;//already counted
else
key[keylen]=Array[i];
int counter = 0;
for (int j = i; j < size; j++) {
if (key[keylen] == Array[j]) {
counter++;
}
}
keylen++;
if (counter > 1) {
System.out.println(Array[i] + ":" + counter + " times ");
}
}
}
}
输出附在屏幕截图中。