以下是我总结的常用的四种较为常用的方法。
- 方法一:(可以根据N的设置进行录入多个数值,来进行多个数值求最大值的比较)
import java.util.Scanner;
public class lj01 {
public static void main(String[] args) {
System.out.println("--------------------求最大值----------------------");
//方法一:适合多个数的录入及比较
int N=3;
Scanner sc=new Scanner(System.in);
int[] arr = new int[N];
int max=0;
for(int i=0;i<N;i++) {
System.out.println("请输入一个整数");
arr[i]= sc.nextInt();
if(arr[i]>=max) {
max=arr[i];
}
}
System.out.println("最大数为"+max);
}
}
当然在写这些代码时,也遇到了一些错误:比如
之前的一句代码是这样写的:int arr[i]= sc.nextInt();
然后进行调试,就会显示错误:Type mismatch: cannot convert from int to int[] 类型不匹配:无法从int转换为int[ ]
改正方式:去掉int,即arr[i]= sc.nextInt();
- 方法二(此种方法最为基础常用):
import java.util.Scanner;
public class lj01 {
public static void main(String[] args) {
//方法二
System.out.println("--------------------求最大值----------------------");
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个数");
int a=sc.nextInt();
System.out.println("请在输入一个数");
int b=sc.nextInt();
System.out.println("请输入最后一个数");
int c=sc.nextInt();
if(a>=b) {
if(a>=c) {
System.out.println("最大值为"+a);
}
else {
System.out.println("最大值为"+c);
}
}
else {
if(b>=c) {
System.out.println("最大值为"+b);
}
else {
System.out.println("最大值为"+c);
}
}
}
}
- 方法三:(简易比较法,适合数值较少的比较)
import java.util.Scanner;
public class lj01 {
public static void main(String[] args) {
//方法三 三元运算符
System.out.println("--------------------求最大值----------------------");
int a=10;
int b=20;
int c=-19;//也可以从键盘录入,如上述方法
int max = 0;
max=(c>(max=(a>b?a:b))?c:max);
System.out.println("最大值为"+max);
}
}
方法三升级版(可以根据N的设置进行录入多个数值,来进行多个数值求最大值的比较)
import java.util.Scanner;
public class lj01 {
public static void main(String[] args) {
//方法三 三元运算符
System.out.println("--------------------求最大值----------------------");
int N=3;
Scanner sc=new Scanner(System.in);
int[] arr = new int[N];
int max=0;
for(int i=0;i<N;i++) {
System.out.println("请输入一个整数");
arr[i]= sc.nextInt();
max=(arr[i]>max?arr[i]:max);
}
System.out.println("最大数为"+max);
}
}
方法四:while循环
import java.util.Scanner;
public class lj01 {
public static void main(String[] args) {
//方法四while
System.out.println("--------------------求最大值----------------------");
int N=10;
Scanner sc=new Scanner(System.in);
int [] arr=new int[N];
System.out.println("请输入"+N+"个数");
for(int i=0;i<N;i++) {
arr[i]=sc.nextInt();
}
int max=0;
int i=0;
while(true){
if(arr[i]>max) {
max=arr[i];
}
i++;
if(i==N)
break;
}
System.out.println("最大值为"+max);
}
}
方法五:仅适用于两个数的比较
public int getMax(int a ,int b){
b = a-b;//此时b>>31为1则b小于0即a<b,若b>>31为0 则a>b
//若a<b a=a-(a-b),若a>b a=a-0
return a+c*(a-b);
}
解析:
1. c = (a-b)>>31
(1)当a>=b时,(a-b)符号位为0,(a-b)右移31位,高位补0,右移后的结果为0;
(2)当a<b时,(a-b)符号位为1,(a-b)右移31位,高位补1,故右移后的结果不是 我们想当然的1,而是-1。
2.a+c*(a-b)
(1)当c=0时,说明a>=b,a+c*(a-b)=a,返回a;
(2)当c=-1时,说明a<b,a+c*(a-b)=a-(a-b)=b,返回b。
以上几种方法可以参考。。。
当然以后应该会学到更为简单的方法。。。
带有思考的学习。。。早日成为大神。。。