连续获取用户输入的4个数字,求这4个数字组成的最大的值和最小值的差
题目:连续获取用户输入的4个数字【0-9】,求这4个数字组成的最大的值和最小值的差
@1如果用户输入的不是数字,或非法数字,给出提示,继续输入直到够4个为止
@2无论用户输入什么,程序不能因为报错而异常退出
package com.xja.test;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
/**
* @author Administrator
*练习1:连续获取用户输入的4个数字【0-9】,求这4个数字组成的最大的值和最小值的差
@1如果用户输入的不是数字,或非法数字,给出提示,继续输入直到够4个为止
@2无论用户输入什么,程序不能因为报错而异常退出
*/
public class Demo1Test {
/**
* 1.用户输入的4个数字 明确4个数字,考虑用数组存储数据
* 2.固定的4个数字,计数器思想count++
* 3.[3,1,2,0] 排序--》升序从小到大 [0,1,2,3]
* 4.如何得到最大值3210,拼接arr[3]*1000+arr[2]*100+arr[1]*10+arr[0]
* 5.如何得到最小值0123,拼接arr[0]*1000+arr[1]*100+arr[2]*10+arr[3]
*/
public static void main(String[] args) {
System.out.println("start.....");
//定义一个数组,用来存储用户输入的4个数字
String[] sa = new String[4];
//提示用户输入[0-9]的数字
System.out.println("请输入[0-9]的数字:");
//获取用户输入的数字,创建Scanner对象
Scanner sc = new Scanner(System.in);
//使用循环,让用户能够多次输入
//使用while(true),程序要有出口,如果没有出口会怎么样?栈内存溢出
//定义一个出口,数组sa中有4个数字。终止循环 break;
//定义一个数组下标==4,直接退出循环
int i = 0; //难点,判断程序的出口,sa数组的下标
while(true) {
//Thread.sleep(1000);
//获取用户输入的第一个数字
//给用户一个提示:请输入第(i+1)个数字
System.out.println("请输入第"+(i+1)+"个数字:");
String s = sc.next();
//用户输入的不是数字,或非法数字,给出提示
//非法数字 abc*&$123把数字替换成'',如果得到的新的字符串.length>0,非法
//4a
if(s.length()!=1||s.replaceAll("[0-9]", "").length()>0) {
//非法:提示
System.out.println("数据非法!!!");
continue;//直接跳出当前循环,继续执行下一次循环
}
//把第i+1个数字放到数组中
sa[i]=s;
i++;//递增数组下标
if(i==4) {
break;//终止循环
}
}
//证明数组中已经存了满足需求的4个数字
//对数组进行排序
Arrays.sort(sa);
//最大值
String max = sa[3]+sa[2]+sa[1]+sa[0]; //'3'*1000
//最小值
String min = sa[0]+sa[1]+sa[2]+sa[3];
//差值,用int 接收 ,自动拆箱
int cha = Integer.parseInt(max)-Integer.parseInt(min);
System.out.println("最大值-最小值:"+cha);
}
}