1.程序要求:
用户随机输入一组整数,求出这组数当中的最大值。当用户出现非法输入的时候,要能够检测出来。用户输入的数字的个数不定,几个都可以。
2.程序设计思想:
要想实现输入的数字个数不定,可以采用字符串来实现。即把用户输入的字符存放到一个字符串里面,因为用户在输入数字的时候,用空格隔开,我们就可以通过空格来获取各个数字。在判断每个数字是否符合要求,如果符合,就把它转化为数字然后存储到一个数组当中去,如果不符合,就提示用户有非法输入。
3.源代码:
package MathTest1; import java.util.Scanner; import java.util.ArrayList; class FindIntMax { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Major1 m = new Major1(); m.Input(); m.out(); m.InputToIntArr(); } } class Major1 { private String inputStr;//获取用户的输入表达式 public void Input() { System.out.println("输入一串整数"); Scanner sc = new Scanner(System.in); inputStr = sc.nextLine(); } public void out() { System.out.println(inputStr + "长度" +inputStr.length()); } //检查输入的字符串是否符合程序要求 返回字符串中数字的个数 public int checkInputStr() { //记录数字字符的个数 int count = 0; //记录每个字串开始时的位置 int index = 0; while(index < inputStr.length()) { //定位下次开始获取子串的位置 while(String.valueOf(inputStr.charAt(index)).equals(" ")) { index++; if(index >= inputStr.length()) { break; } } String str = ""; //得到两个空格之间的子串 while(!(String.valueOf(inputStr.charAt(index)).equals(" "))) { str = str+String.valueOf(inputStr.charAt(index)); index++; if(index >= inputStr.length()) { break; } } if(checkSubStr(str)) { count++; } else { return -1; } } return count; } //检查子串是否符合要求 public boolean checkSubStr(String str1) { boolean f = true; //处理单独的- if(str1.equals("-")) { f = false; } String substr = String.valueOf(str1.charAt(0)); //负数的第一个字符可能是- if(substr.equals("-")||substr.equals("1")||substr.equals("2")||substr.equals("3")|| substr.equals("4")||substr.equals("5")||substr.equals("6")||substr.equals("7")|| substr.equals("8")||substr.equals("9")||substr.equals("0")) { for(int j = 1;j < str1.length();j++) { substr = String.valueOf(str1.charAt(j)); if(!(substr.equals("1")||substr.equals("2")||substr.equals("3")|| substr.equals("4")||substr.equals("5")||substr.equals("6")|| substr.equals("7")|| substr.equals("8")||substr.equals("9")||substr.equals("0"))) { f = false; break; } } } else { f = false; } return f; } // public int findMax(int[] list) { int maxNum = list[0]; for(int i = 0;i < list.length;i++) { if(list[i] > maxNum) { maxNum = list[i]; } } return maxNum; } public void InputToIntArr() { if(checkInputStr() == -1) { System.out.println("您输入了非数字字符!"); } else { int k = checkInputStr(); int[] list = new int[k]; int index = 0; int count = 0; while(index < inputStr.length()) { //定位下次开始获取子串的位置 while(String.valueOf(inputStr.charAt(index)).equals(" ")) { index++; if(index >= inputStr.length()) { break; } } String str = ""; //得到两个空格之间的子串 while(!String.valueOf(inputStr.charAt(index)).equals(" ")) { str = str+String.valueOf(inputStr.charAt(index)); index++; if(index >= inputStr.length()) { break; } } //子串已经全部是数字串可以赋值 list[count] = Integer.parseInt(str); count++; } System.out.println(findMax(list)); } } }
4.测试用例:
5个正整数
5个负整数
10个正整数
7个负整数
出现小数
出现非数字字符