Java 逆序排列,找出最大值,按从大到小顺序排列
用户输入一组数据,将其逆序排列、找出最大值、按从大到小顺序排列,我将这三中需求封装成三个方法直接调用即可。
核心部分有注释,解释代码意思
直接上代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class day01_demo06 {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入一组数据:");
String[] s = br.readLine().split(" ");
int[] arr = new int[s.length];
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(s[i]);
}
System.out.println("请选择将这组数据进行什么操作:(1:逆序排列 2:找出最大值 3:按从大到小排列)");
int x = scanner.nextInt();
for (;;){
if (x>4||x<1) {
System.out.println("未找到方法,请重新选择:(1:逆序排列 2:找出最大值 3:按从大到小排列)");
x = scanner.nextInt();
}
//逆序排列
if (x==1){
getNx(arr);
break;
}
//找出最大值
if (x==2){
int max = getMax(arr);
System.out.print("这组数据中最大值是:" + max);
return;
}
//按从大到小排列
if (x==3){
getNewArr(arr);
break;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
//逆序排列
public static void getNx(int[] arr){
int temp; //定义一个中间变量
for (int i = 0; i < arr.length / 2; i++) { // 这里for循环只需要循环arr.length的一半即可
temp = arr[i]; //将第i个数赋值给中间变量temp
arr[i] = arr[arr.length-i-1]; //将第arr.length-i-1个数赋值给arr[i](首次循环时 是将最后一个数赋值给arr[0])
arr[arr.length-i-1] = temp; // 将temp(第i个数)赋值给arr[arr.length-i-1]
}
}
//找出最大值
public static int getMax(int[] arr){
int temp = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > temp){ //for循环每次都去比较 如果下一个数大于temp 就将这个数赋值给temp
temp = arr[i];
}
}
return temp; //返回这组数据中的最大值
}
//从大到小排列
public static void getNewArr(int[] arr){
// 每i个数都要和其他比较,所以要for循环两次
for (int i = 0; i < arr.length; i++) {
for (int j = i; j < arr.length; j++){ // 这里 j=i 二层循环是将其余最大值赋给arr[i],所有j=i 避免重复比较
int temp = arr[i]; // 先将arr[i] 赋值给 中间变量temp 外层首次循环时 是将arr[0]赋值给temp
if (arr[j] > temp){ //外层首次循环时: 如果arr的第j个大于arr[0]时,就将arr[j]赋值给第0个
temp = arr[j]; // 因为要将第0个 赋值给第j个 因此要有一个中间变量去接收
arr[j] = arr[i]; // 将第0个(较小的数)给第j个
arr[i] = temp; // 将最大的数给第0个
}
}
}
}
}