案例解析
基础实现案例
编写一个程序,输入1个整数,如果该整数不是0,则继续输入,直到输入0时为止。查找这一组数中最大的数,并输出最大的数出现的次数。如果输入的第一个数为0,就输出:“Only 0 is inputed”。
# 源文件保存为“FindMaxAndCount.java”import java.util.Scanner;publicclassFindMaxAndCount {publicstaticvoidmain(String[] args) {Scannerscanner=newScanner(System.in); System.out.print("请输入整数(输入结束):");intfirstNum= scanner.nextInt();if (firstNum == ) { System.out.println("Only 0 is inputed");return; }intmax= firstNum;intcount=1;while (true) {intnum= scanner.nextInt();if (num == ) {break; }if (num > max) { max = num; count = 1; } elseif (num == max) { count++; } } System.out.println("最大的数是: " + max); System.out.println("它出现的次数是: " + count); }}
运行结果直接输入数字
请输入整数(输入0结束):0Only 0 is inputed
输入一系列数字,以结束
请输入整数(输入0结束):54520最大的数是: 5它出现的次数是: 2
代码解析:
先用Scanner获取第一个输入的数字如果第一个数就是0,直接输出提示信息并结束程序初始化max为第一个数,count初始化为1进入无限循环,不断读取输入的数字遇到0就跳出循环每次遇到比当前max更大的数,就更新max并重置count遇到和max相等的数,count加1最后输出结果
这个程序能正确处理各种情况,包括所有数都相同、第一个数就是最大的、或者后面出现更大的数等情况。
找出最小数及其出现次数
稍微修改一下就能实现找最小数的功能:
# 源文件保存为“FindMinAndCount.java”import java.util.Scanner;publicclassFindMinAndCount {publicstaticvoidmain(String[] args) {Scannerscanner=newScanner(System.in); System.out.print("请输入整数(输入结束):");intfirstNum= scanner.nextInt();if (firstNum == ) { System.out.println("Only 0 is inputed");return; }intmin= firstNum;intcount=1;while (true) {intnum= scanner.nextInt();if (num == ) break;if (num < min) { min = num; count = 1; } elseif (num == min) { count++; } } System.out.println("最小的数是: " + min); System.out.println("它出现的次数是: " + count); }}
直接输入数字
请输入整数(输入0结束):0Only 0 is inputed
输入一系列数字,以结束
请输入整数(输入0结束):1610最小的数是: 1它出现的次数是: 2
变化之处:
把max改成了min比较条件从>变成了<其他逻辑完全一致
同时找出最大和最小数
有时候我们需要同时获取最大和最小值:
# 源文件保存为“FindBoth.java”import java.util.Scanner;publicclassFindBoth {publicstaticvoidmain(String[] args) {Scannerscanner=newScanner(System.in); System.out.print("请输入整数(输入结束):");intfirstNum= scanner.nextInt();if (firstNum == ) { System.out.println("Only 0 is inputed");return; }intmax= firstNum;intmin= firstNum;intmaxCount=1;intminCount=1;while (true) {intnum= scanner.nextInt();if (num == ) break;if (num > max) { max = num; maxCount = 1; } elseif (num == max) { maxCount++; }if (num < min) { min = num; minCount = 1; } elseif (num == min) { minCount++; } } System.out.println("最大的数是: " + max + ",出现次数: " + maxCount); System.out.println("最小的数是: " + min + ",出现次数: " + minCount); }}
运行结果直接输入数字
请输入整数(输入0结束):0Only 0 is inputed
输入一系列数字,以结束
请输入整数(输入0结束):5848440最大的数是: 8,出现次数: 2最小的数是: 4,出现次数: 3
改进点:
同时维护max和min两个变量分别统计它们的出现次数每次输入都要同时更新两套逻辑
使用数组存储后再处理
有时候我们需要保留所有输入数据,可以先用数组存储:
# 源文件保存为“ArrayVersion.java”import java.util.ArrayList;import java.util.Scanner;publicclassArrayVersion {publicstaticvoidmain(String[] args) {Scannerscanner=newScanner(System.in); ArrayList<Integer> numbers = newArrayList<>(); System.out.print("请输入整数(输入结束):");while (true) {intnum= scanner.nextInt();if (num == ) break; numbers.add(num); }if (numbers.isEmpty()) { System.out.println("Only 0 is inputed");return; }intmax= numbers.get();intcount=1;for (inti=1; i < numbers.size(); i++) {intnum= numbers.get(i);if (num > max) { max = num; count = 1; } elseif (num == max) { count++; } } System.out.println("最大的数是: " + max); System.out.println("它出现的次数是: " + count); }}
运行结果直接输入数字
请输入整数(输入0结束):0Only 0 is inputed
输入一系列数字,以结束
请输入整数(输入0结束):54520最大的数是: 5它出现的次数是: 2
特点:
使用ArrayList动态存储所有输入处理完输入后再进行计算适合需要多次处理同一组数据的情况
实践练习题
处理负数情况
修改程序,使其能够正确处理所有负数输入的情况。
参考代码:
# 源文件保存为“NegativeNumbers.java”import java.util.Scanner;publicclassNegativeNumbers {publicstaticvoidmain(String[] args) {Scannerscanner=newScanner(System.in); System.out.print("请输入整数(输入结束):");intfirstNum= scanner.nextInt();if (firstNum == ) { System.out.println("Only 0 is inputed");return; }intmax= firstNum;intcount=1;while (true) {intnum= scanner.nextInt();if (num == ) break;if (num > max) { max = num; count = 1; } elseif (num == max) { count++; } } System.out.println("最大的数是: " + max); System.out.println("它出现的次数是: " + count); }}
运行结果直接输入数字
请输入整数(输入0结束):0Only 0 is inputed
输入一系列数字,以结束
请输入整数(输入0结束):1-11-10最大的数是: 1它出现的次数是: 2
说明:实际上原来的代码已经能正确处理负数了,因为比较逻辑num > max对负数同样适用。这个练习主要是让同学们思考验证一下。
找出第二大的数
修改程序,使其能够找出第二大的数及其出现次数。
参考代码:
# 源文件保存为“SecondLargest.java”import java.util.Scanner;publicclassSecondLargest {publicstaticvoidmain(String[] args) {Scannerscanner=newScanner(System.in); System.out.print("请输入整数(输入结束):");intfirstNum= scanner.nextInt();if (firstNum == ) { System.out.println("Only 0 is inputed");return; }intmax= firstNum;intsecondMax= Integer.MIN_VALUE;intmaxCount=1;intsecondMaxCount=;while (true) {intnum= scanner.nextInt();if (num == ) break;if (num > max) { secondMax = max; secondMaxCount = maxCount; max = num; maxCount = 1; } elseif (num == max) { maxCount++; } elseif (num > secondMax) { secondMax = num; secondMaxCount = 1; } elseif (num == secondMax) { secondMaxCount++; } }if (secondMaxCount == ) { System.out.println("没有第二大的数"); } else { System.out.println("第二大的数是: " + secondMax); System.out.println("它出现的次数是: " + secondMaxCount); } }}
运行结果直接输入数字
请输入整数(输入0结束):0Only 0 is inputed
输入一系列数字,以结束
请输入整数(输入0结束):5868450第二大的数是: 6它出现的次数是: 1
胜宇配资-散户配资官网下载-股票配资代理-正规股票配资排名提示:文章来自网络,不代表本站观点。