Я пытаюсь создать программу для пользователя, чтобы ввести 5 чисел и проверить, являются ли они последовательными в массиве, но у меня проблема

#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