#java
#java
Вопрос:
Я пытаюсь создать программу, которая сообщает мне, отсортирован ли мой массив (по возрастанию и убыванию).
Я создал функцию, и если возвращает true, массив уже отсортирован, а если возвращает false, массив не отсортирован.
На самом деле, всегда получается «Не отсортировано». Я не знаю, правильна ли логика, но я думаю, что да, я не знаю.
Вы можете мне помочь, ребята?
package exercici11;
import java.util.Scanner;
public class SortedOrNot {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] myArray = new int[10];
int prev1 = 0;
int prev2 = 0;
int cont1 = 0;
int cont2 = 0;
System.out.print("Enter 10 numbers: ");
for (int i = 0; i < myArray.length; i ) {
myArray[i] = sc.nextInt();
}
String result = isSorted(myArray, prev1, prev2, cont1, cont2) ? result = "Is sorted." : "Is not sorted.";
System.out.println(result);
sc.close();
}
private static boolean isSorted(int[] myArray, int prev1, int prev2, int cont1, int cont2) {
for (int i = 0; i < myArray.length; i ) {
for (int j = 0; j < myArray.length; j ) {
prev1 = myArray[i];
if (prev1 < myArray[i]) {
// Ascending sort
cont1 ;
if (cont1 == 10) {
return true;
}
} else if (prev2 > myArray[i]) {
// Descending sort
cont2 ;
if (cont2 == 10) {
// Ascending sort
return true;
}
}
}
}
return false;
}
}
Спасибо!
С уважением, Алекс.
Комментарии:
1.
prev1 < myArray[i]
не может быть истинным сразу после назначенияmyArray[i]
prev1
. Рассмотрим<=
?2. Я не понимаю ни отрицательного, ни близкого голосования. Я считаю вопрос совершенно ясным. Пример кода может быть не совсем минимальным, но ошибка очевидна: всегда получается «Не отсортировано» . Итак, давайте не будем требовать невозможного от программистов базового уровня.
3. Алекс, ты делаешь это более сложным, чем нужно. По крайней мере, мне немного сложно следовать логике, которую вы имели в виду. См., Например, Проверку того, отсортирован ли массив в Java .
Ответ №1:
Я изменил isSorted()
метод и добавил несколько комментариев.
import java.util.Scanner;
public class SortedOrNot {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] myArray = new int[10];
System.out.print("Enter 10 numbers: ");
for (int i = 0; i < myArray.length; i ) {
myArray[i] = sc.nextInt();
}
String result = isSorted(myArray) ? result = "Is sorted." : "Is not sorted.";
System.out.println(result);
sc.close();
}
private static boolean isSorted(int[] myArray) {
int count = 0;
int firstElement = myArray[0];
int lastElement = myArray[myArray.length - 1];
if(lastElement - firstElement >= 0){
// Let's say myArray is sorted and if (lastElement - firstElement) >= 0
// then I check if the elements from array are in ascending order
// OR are all the same
for(int i = 0; i < myArray.length - 1; i ){
if(myArray[i] <= myArray[i 1]) {
count ;
}
}
}
else {
// else I check if the elements from array are in descending order
for(int i = 0; i < myArray.length - 1; i ){
if(myArray[i] >= myArray[i 1]){
count ;
}
}
}
// for n numbers there will be n - 1 comparisons
return count == myArray.length - 1;
}
}
Ответ №2:
Для этого вы можете использовать метод Arrays.sort():
import java.util.Arrays;
import java.util.Collections;
public class CheckSortedArray {
public static void main(String[] args) {
Integer[] arr = { 1, 2, 3, 6, 9, 100 };
Integer[] arr2 = { 1, -2, 3, 6, 9, 100 };
Integer[] arr3 = { 9, 7, 0, -1, -100 };
System.out.println(isArraySorted(arr, true)); // Prints true as array is sorted in ascending order
System.out.println(isArraySorted(arr2, true)); // Prints false as array is unsorted
System.out.println(isArraySorted(arr3, false)); // Prints true as array is sorted in descending order
}
/**
* Checks if given array is sorted or not in given order
*
* @param arr Input array to check its order
* @param isAscendingOrder true for ascending order, false for descending
* @return Array is sorted or not
*/
public static boolean isArraySorted(Integer[] arr, boolean isAscendingOrder) {
Integer[] arrCopy = Arrays.copyOf(arr, arr.length);
if (isAscendingOrder) {
// Sorts the array in ascending order
Arrays.sort(arr);
} else {
// Sorts the array in descending order
Arrays.sort(arr, Collections.reverseOrder());
}
// Checks if the original array is equal to sorted array or not
return Arrays.equals(arr, arrCopy);
}
}
Ответ №3:
Второе значение for должно начинаться с i 1, и вы должны сравнить count1 и count2 с 45.