#java #arrays #numbers
#java #массивы #числа
Вопрос:
Я думаю, что мне удалось выполнить большую часть программы, но столкнулся с проблемой при вводе чисел на этапе ввода для последующей сортировки. Может кто-нибудь помочь мне понять, что мне нужно исправить на этапе ввода или как мне нужно объявить свои переменные, чтобы они были отсортированы в массиве позже в программе?
Это код:
import java.util.*;
public class Main{
int a;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Please enter your numbers to be sorted in the array: ");
a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int d = sc.nextInt();
int e = sc.nextInt();
}
public static boolean checkConsecutive(int[] A) {
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
// to find the largest and smallest numbers in the array
for (int i: A) {
if (i < min) { min = i; }
if (i > max) { max = i; }
}
// in order for an array to contain consecutive integers, the difference
// between maximum and element element in it should be exactly n-1
if (max - min != A.length - 1) {
return false;
}
// create an empty set (we can also use a visited array)
Set<Integer> visited = new HashSet<>();
// traverse the array and checks if each element appears only once
for (int i: A)
{
// if element is seen before, return false
if (visited.contains(i)) {
return false;
}
// mark element as seen
visited.add(i);
}
// we reach here when all elements in the array are distinct
return true;
}
// Check if an array is formed by consecutive integers
public static void printInfo(String[] args) {
int[] A = { a, b, c, d, e};
if (checkConsecutive(A)) {
System.out.print("Array contains consecutive integers");
} else {
System.out.print("Array do not contain consecutive integers");
}
}
}
Комментарии:
1. Вместо использования пяти переменных (это не масштабируется до 10, 20, 100, верно?) Считывать непосредственно в массив с помощью цикла
arr[i] = sc.nextInt()
. В качестве отступления: было бы намного проще просто проверить, что каждый элемент (начиная с индекса 1) ровно на 1 больше предыдущего элемента, вместо проверки повторения, минимального и максимального.
Ответ №1:
Проблема, с которой вы столкнулись, заключалась в том, что переменные a, b, c, d, e
должны быть объявлены глобально и вызывать printInfo()
.
В противном случае вы можете создать следующее запрос размера массива и введите число и проверьте, содержит ли массив последовательное целое число или нет
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Please enter the size of the array: ");
int size = Integer.parseInt(sc.nextLine());
int[] A = new int[size];
for (int i = 0; i < size; i ) {
A[i] = sc.nextInt();
}
if (checkConsecutive(A)) {
System.out.print("Array contains consecutive integers");
} else {
System.out.print("Array does not contain consecutive integers");
}
sc.close();
}
public static boolean checkConsecutive(int[] A) {
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
// to find the largest and smallest numbers in the array
for (int i : A) {
if (i < min) {
min = i;
}
if (i > max) {
max = i;
}
}
// in order for an array to contain consecutive integers, the difference
// between maximum and element element in it should be exactly n-1
if (max - min != A.length - 1) {
return false;
}
// create an empty set (we can also use a visited array)
Set<Integer> visited = new HashSet<>();
// traverse the array and checks if each element appears only once
for (int i : A) {
// if element is seen before, return false
if (visited.contains(i)) {
return false;
}
// mark element as seen
visited.add(i);
}
// we reach here when all elements in the array are distinct
return true;
}
}
, вывод
Please enter the size of the array: 5
1 2 3 4 5
Array contains consecutive integers
Process finished with exit code 0