java - 这种方法有什么问题...?
问题描述
import java.util.Scanner;
public class InputCalculator {
public static void inputThenPrintSumAndAverage(){
Scanner scanner = new Scanner(System.in);
boolean first = true;
int sum = 0;
int count = 0;
int avg = 0;
while(true){
int number = scanner.nextInt();
boolean isAnInt = scanner.hasNextInt();
if(isAnInt){
sum += number;
count++;
avg = Math.round((sum)/count);
}else{
System.out.println("SUM = " + sum + " AVG = " + avg);
break;
}
scanner.nextLine();
}
scanner.close();
}
}
当输入为“1、2、3、4、5、a”时,我认为它没有读取输入 5,结果 sum = 10 和 avg = 2!为什么会这样?顺便说一句,它只是一个方法而不是整个代码!
解决方案
当scanner.nextInt() 为您提供'5' 时,下一行'scanner.hasNextInt() 为假。只需更改线路顺序
import java.util.Scanner;
public class InputCalculator {
public static void inputThenPrintSumAndAverage(){
Scanner scanner = new Scanner(System.in);
boolean first = true;
int sum = 0;
int count = 0;
int avg = 0;
while(true){
boolean isAnInt = scanner.hasNextInt();
if(isAnInt){
int number = scanner.nextInt();
sum += number;
count++;
avg = Math.round((sum)/count);
}else{
System.out.println("SUM = " + sum + " AVG = " + avg);
break;
}
scanner.nextLine();
}
scanner.close();
}
}
你也可以清理代码
import java.util.Scanner;
public class InputCalculator {
public static void inputThenPrintSumAndAverage(){
Scanner scanner = new Scanner(System.in);
int sum = 0;
int count = 0;
while( scanner.hasNextInt() ){
int number = scanner.nextInt();
sum += number;
count++;
}
scanner.close();
double avg = Math.round((sum)/count);
System.out.println("SUM = " + sum + " AVG = " + avg);
}
}
推荐阅读
- python - xlsxwriter:创建指向特定单元格的 excel 链接
- scala - Scala, ZIO - 将 Future 转换为 ZIO 或 ZIO 转换为 Future。可能吗?
- python - AWS Lambda 连接到 RDS 上的 MySQL 数据库间歇性超时
- javascript - 无法在“窗口”上执行“getComputedStyle”:参数 1 不是“元素”类型。在 JS 地图中
- java - 导入spring boot项目时出现问题
- java - 如果列表中出现多次,则删除该项目的所有实例
- azure - 如何在 Arm 模板中等待在另一个 ResourceGroup 中部署资源
- r - R中的多元层次聚类方法
- node.js - 在电子应用程序中启用硬件加速
- google-apps-script - 前面 2 个单元格的 Google Sheet SetValu