介绍
在这个实验中,你将学习如何在 Java 中检查一个数字数组是否已排序。我们将探讨比较相邻元素的基本概念,这是许多排序算法的核心思想。你将学习如何检查数组是升序还是降序排列,以及如何处理元素相等的情况。在本实验结束时,你将对判断数组是否已排序所需的逻辑有深入的理解。
比较相邻元素以进行排序
在这一步中,我们将开始探索比较相邻元素的基本概念,这是许多排序算法的核心思想。排序是将元素按特定顺序(如升序或降序)排列的过程。
假设你有一个数字列表,你想将它们按从小到大的顺序排列。一种简单的开始方法是查看相邻的两个数字,并确定哪个应该排在前面。
让我们创建一个简单的 Java 程序来演示这个概念。我们将创建一个比较两个数字的类。
如果
HelloJava.java文件仍在 WebIDE 编辑器中打开,请打开它。我们将修改这个文件来编写新程序。将文件的全部内容替换为以下代码:
public class CompareNumbers { public static void main(String[] args) { int number1 = 15; int number2 = 10; System.out.println("Comparing " + number1 + " and " + number2 + ":"); if (number1 > number2) { System.out.println(number1 + " is greater than " + number2); } else if (number1 < number2) { System.out.println(number1 + " is less than " + number2); } else { System.out.println(number1 + " is equal to " + number2); } } }让我们看看这段代码的新部分:
public class CompareNumbers:我们将类名改为CompareNumbers,以更好地反映程序的功能。请记住,文件名必须与类名匹配,因此我们稍后需要重命名文件。int number1 = 15;和int number2 = 10;:这两行声明了两个整数变量number1和number2,并为它们赋了初始值。System.out.println("Comparing " + number1 + " and " + number2 + ":");:这行代码打印一条消息,表明正在比较哪些数字。if (number1 > number2):这是一个if语句。它检查括号内的条件 (number1 > number2) 是否为真。如果为真,则执行if语句后面紧跟的花括号{}内的代码。else if (number1 < number2):这是一个else if语句。如果if语句中的条件为假,则检查这个条件 (number1 < number2)。如果为真,则执行其花括号内的代码。else:这是一个else语句。如果if和else if条件都不为真,则执行else块内的代码。System.out.println(...):这些行根据比较结果打印消息。
保存文件(Ctrl+S 或 Cmd+S)。
现在,我们需要重命名文件以匹配新的类名。在终端中,确保你位于
~/project目录下:cd ~/project使用
mv命令重命名文件:mv HelloJava.java CompareNumbers.java此命令将文件
HelloJava.java移动(重命名)为CompareNumbers.java。现在,编译新程序:
javac CompareNumbers.java如果编译成功,你应该看不到任何输出。
最后,运行编译后的程序:
java CompareNumbers你应该会看到指示比较结果的输出:
Comparing 15 and 10: 15 is greater than 10
你已经成功创建并运行了一个 Java 程序,该程序比较两个相邻元素并打印结果。这种简单的比较是更复杂排序算法的基础。
检查升序和降序排列
在上一步中,我们学习了如何比较两个数字。现在,让我们在此基础上进行扩展,检查一对相邻数字是按升序还是降序排列。这是考虑排序时的另一个基本概念。
升序是指将元素按从小到大的顺序排列(例如,1、5、10)。降序是指将元素按从大到小的顺序排列(例如,10、5、1)。
我们将修改 CompareNumbers.java 程序来检查这些特定的排序顺序。
在 WebIDE 编辑器中打开
CompareNumbers.java文件。将现有代码替换为以下代码:
public class CheckOrder { public static void main(String[] args) { int number1 = 15; int number2 = 10; System.out.println("Checking order of " + number1 + " and " + number2 + ":"); if (number1 < number2) { System.out.println("The numbers are in ascending order."); } else if (number1 > number2) { System.out.println("The numbers are in descending order."); } else { System.out.println("The numbers are equal."); } } }以下是我们所做的更改:
public class CheckOrder:我们再次将类名改为CheckOrder。我们需要重命名文件以匹配类名。if条件现在检查number1是否小于number2。如果为真,则表示它们是升序排列。else if条件检查number1是否大于number2。如果为真,则表示它们是降序排列。else块处理两个数字相等的情况。
保存文件(Ctrl+S 或 Cmd+S)。
在终端中,确保你位于
~/project目录下:cd ~/project重命名文件以匹配新的类名:
mv CompareNumbers.java CheckOrder.java编译修改后的程序:
javac CheckOrder.java同样,没有输出表示编译成功。
运行程序:
java CheckOrder当
number1 = 15且number2 = 10时,输出应该是:Checking order of 15 and 10: The numbers are in descending order.让我们快速修改数字以查看升序的情况。在编辑器中打开
CheckOrder.java并更改值:public class CheckOrder { public static void main(String[] args) { int number1 = 5; // Changed from 15 int number2 = 8; // Changed from 10 System.out.println("Checking order of " + number1 + " and " + number2 + ":"); if (number1 < number2) { System.out.println("The numbers are in ascending order."); } else if (number1 > number2) { System.out.println("The numbers are in descending order."); } else { System.out.println("The numbers are equal."); } } }保存文件。
再次编译程序:
javac CheckOrder.java运行程序:
java CheckOrder现在输出应该反映升序排列:
Checking order of 5 and 8: The numbers are in ascending order.
你已经成功修改了程序,以检查两个相邻数字是按升序还是降序排列。这是理解排序算法如何确定元素正确位置的关键一步。
处理相等元素
在前面的步骤中,我们比较了两个数字,并检查它们是按升序还是降序排列。我们还考虑了两个数字相等的情况。在这一步中,我们将专门关注处理相邻元素相同的场景。
在排序时,相等元素的顺序通常对最终的排序结果没有影响,但对于我们的比较逻辑来说,正确识别这种情况很重要。我们当前的 CheckOrder.java 程序已经通过 else 块处理了这种情况。让我们明确地测试这个情况。
在 WebIDE 编辑器中打开
CheckOrder.java文件。将
number1和number2的值修改为相等:public class CheckOrder { public static void main(String[] args) { int number1 = 7; // Changed to 7 int number2 = 7; // Changed to 7 System.out.println("Checking order of " + number1 + " and " + number2 + ":"); if (number1 < number2) { System.out.println("The numbers are in ascending order."); } else if (number1 > number2) { System.out.println("The numbers are in descending order."); } else { System.out.println("The numbers are equal."); } } }保存文件(Ctrl+S 或 Cmd+S)。
在终端中,确保你位于
~/project目录下:cd ~/project编译修改后的程序:
javac CheckOrder.java没有输出表示编译成功。
运行程序:
java CheckOrder当两个数字都设置为 7 时,输出现在应该是:
Checking order of 7 and 7: The numbers are equal.
这证实了我们的程序能够正确识别两个相邻数字相等的情况。处理这种情况对于完善我们的比较逻辑很重要。
在排序算法的上下文中,当相邻元素相等时,它们已经处于有效的相对顺序(根据严格程度,升序和降序都可以被认为是成立的,但通常它们只是被认为“相等”,不需要进行交换)。
你现在已经成功测试了相邻元素相等的情况,完成了我们为排序目的对两个相邻数字进行比较的探索。
总结
在本次实验中,我们首先探索了比较相邻元素的基本概念,这是排序算法的核心思想。我们学习了如何创建一个简单的 Java 程序来比较两个数字,并判断一个数字是大于、小于还是等于另一个数字。这涉及到理解 Java 中变量声明、赋值和条件语句(if、else if、else)的基本语法。我们还练习了修改现有的 Java 文件,并了解了类名与文件名保持一致的重要性。
基于比较相邻元素的概念,我们进一步扩展了知识,以检查数字序列中的升序和降序排列。这需要将比较逻辑迭代应用于多个元素。最后,我们处理了在排序检查过程中遇到相等元素的情况,确保我们的逻辑能够正确处理相邻元素值相同的情况。这些步骤为你提供了在 Java 中以编程方式判断数组是否已排序的基础知识。



