#java #arrays
#java #массивы
Вопрос:
Введите целые числа от 1 до 50: 1 2 1 0
1 встречается 2 раза,
2 встречается 1 раз,
1 встречается 2 раза
Как я могу сделать, чтобы получить 1, встречается только 1 раз? Проблема заключается в том, что он печатается много раз.
import java.util.Scanner;
public class ex3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] num = new int[100];
int i = 0;
System.out.print("Enter the integers between 1 and 50: ");
num[i] = input.nextInt();
while(num[i] != 0){
i ;
num[i] = input.nextInt();
}
for(int j=0;j<i;j ){
int n = 0;
for(int k=0;k<i;k ){
if(num[j] == num[k]){
n ;
}
}
System.out.println(num[j] " occurs " n " times");
}
}
}
Отредактируйте этот код
Комментарии:
1. Что должен делать ваш код?
Ответ №1:
Попробуйте это (пояснения см. в комментариях к коду):
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
int[] num = new int[100];
int i = 0;
while (i < 100) { // Check if the array is already full
System.out.print("Enter 0 to Exit or enter the integers between 1 and 50 (Input #" (i 1) ") : ");
int value = input.nextInt();
if (value == 0) {
break;
}
if (value < 1 || value > 50) { // check if input is between 1 and 50
System.out.println("Input is not between 1 and 50");
} else {
num[i] = value;
System.out.println();
}
i ;
}
System.out.println();
System.out.println("Result: ");
for (int j = 0; j < i; j ) {
int n = 0;
boolean isAlreadyPrinted = false; // flag to check if will be printed or not
for (int k = 0; k < i; k ) {
if (num[j] == num[k]) {
if (j > k) { // this means that the same value is already found and printed
isAlreadyPrinted = true;
}
n ;
}
}
if (!isAlreadyPrinted) {
System.out.println(num[j] " occurs " n " times");
}
}
}
}
Ответ №2:
Проблема в вашем цикле for.
Вы не должны увеличивать значение j до i. Вот почему «1 встречается 2 раза» печатается дважды. Что вам нужно сделать, так это проверить, что значение определенного индекса массива было выполнено несколько раз перед выполнением части печати.
public static<T> T[] subArray(T[] array, int beg, int end) {
return Arrays.copyOfRange(array, beg, end 1);
}
public static boolean hasDuplicateValues (int[] array, int value )
{
boolean result = false ;
int count = 0 ;
for (int i=0 ; i< array.length; i )
{
if(array[i] == value)
{
count = count 1 ;
}
}
if(count > 1)
{
result = true;
}
return resu<
}
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int[] num = new int[100];
int i = 0;
System.out.print("Enter the integers between 1 and 50: ");
num[i] = input.nextInt();
while(num[i] != 0){
i ;
num[i] = input.nextInt();
}
for(int j=0;j<i;j ){
int n = 0;
for(int k=0;k<i;k ){
if(num[j] == num[k]){
n ;
}
}
int[] subarray = subArray(num, 0, i);
boolean isDuplicate = hasDuplicateValues (subarray , num[i] )
if(isDuplicate == false )
{
System.out.println(num[j] " occurs " n " times");
}
}
}