我是初学者,我写了一个java程序,允许你输入n个数字,它只显示最大值,最小值和平均值,如果输入数字-5,我的程序没有正确显示,我需要一些帮助。我想在输入字符串而不是整数时使用try / catch来捕获错误。
import java.util.Scanner;
public class Average{
public static void main(String[]args){
System.out.print("Enter any integer numbers or -5 to quit:");
Scanner scan =new Scanner(System.in);
double avg = 0.0;
int number = -1;
double avg = 0.0;
double sum = 0;
int count = 0;
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
try {
while((scan.nextInt())!= -5)
{
if (count != 0) {
avg = ((double) sum) / count;
count++;
}
if (number > max){
max = number;
}
if(number < min){
min = number;
}
catch (InputMismatchException e) {
System.out.println("please enter only integer numbers");
System.out.println("Average : " + avg);
System.out.println("maximum : " + max);
System.out.println("minimum : " + min);
}
}
}
}
}
答案 0 :(得分:1)
你可能想要
if(number > max) {
max = number;
}
if(number < min) {
min = number;
}
在while循环中,因为现在你只是检查最后一个读取值(同样,没有必要在循环之外启动计数器(在你读完-5之后,顺便说一下,为什么-5?oO) )。
此外,您可能希望以这种方式初始化最小值/最大值,因为如果您的最小值大于0,则代码输出0.如果您的最大值低于0,则相同:
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
对于非整数部分:读取异常并使用try-catch
块来捕获InputMismatchException。
try {
//while(scan.nextInt) here
} catch (InputMismatchException e) {
//Do something here, like print something in the console
}
正如其他人所指出的那样,如果你想要平均值不被截断,则将总和加倍:((double) sum) / count
。
最后,但最重要的是:在问别人之前先尝试自己调试一下。
答案 1 :(得分:1)
试试这个:
import java.util.Scanner;
public class Average {
static Scanner scan;
public static void main(String[] args) {
System.out.println("Enter any integer numbers or -5 to quit:");
scan = new Scanner(System.in);
int number = -1, sum = 0, count = 0;
int max = 0;
int min = 0;
while((number = scanNextInt()) != -5) {
count++;
sum = sum + number;
if(number > max) {
max = number;
}
if(number < min) {
min = number;
}
}
if(number == -5) {
try {
System.out.println("Average : " + (sum / count));
System.out.println("Maximum : " + max);
System.out.println("Minimum : " + min);
}catch(Exception e) {
//Error printing, so quit the program. Look below.
}
//Quit
System.exit(0);
}
scan.close();
}
static int scanNextInt() {
try {
return scan.nextInt();
}catch(Exception e) {
//Stop the program if the user inputs letters / symbols
System.out.println("Invalid Number.");
return -5;
}
}
}
我做出的改变:
1.我创建了一个名为scanNextInt()的方法,如果可能的话,返回scan.nextInt()
。如果它会导致错误,则返回-5以停止程序
2.我在while循环中包含了两个if语句,因此它们实际上有效
3.我已经发现了所有可能的错误,因此您不应该看到任何错误消息
注意:此HAS已经过测试
答案 2 :(得分:1)
要在循环中获取整数输入,响应“退出”值,并防止无效输入,我会使用类似下面的模板。
请注意,至关重要的是,到目前为止,没有一个答案提到,仅仅抓住InputMismatchException
是不够的。您还必须调用扫描仪对象的nextLine()
方法来清除缓冲区中的错误输入。否则,错误输入将在无限循环中重复触发相同的异常。您可能希望根据具体情况使用next()
,但要知道像this has spaces
这样的输入会产生多个异常。
<强>代码强>
package inputTest;
import java.util.Scanner;
import java.util.InputMismatchException;
public class InputTest {
public static void main(String args[]) {
Scanner reader = new Scanner(System.in);
System.out.println("Enter integers or -5 to quit.");
boolean done = false;
while (!done) {
System.out.print("Enter an integer: ");
try {
int n = reader.nextInt();
if (n == -5) {
done = true;
}
else {
// The input was definitely an integer and was definitely
// not the "quit" value. Do what you need to do with it.
System.out.println("\tThe number entered was: " + n);
}
}
catch (InputMismatchException e) {
System.out.println("\tInvalid input type (must be an integer)");
reader.nextLine(); // Clear invalid input from scanner buffer.
}
}
System.out.println("Exiting...");
reader.close();
}
}
示例强>
Enter integers or -5 to quit.
Enter an integer: 12
The number entered was: 12
Enter an integer: -56
The number entered was: -56
Enter an integer: 4.2
Invalid input type (must be an integer)
Enter an integer: but i hate integers
Invalid input type (must be an integer)
Enter an integer: 3
The number entered was: 3
Enter an integer: -5
Exiting...
答案 3 :(得分:0)
首先 - 您需要在最小数字检查后移动while循环的结束括号,以允许对您读取的每个数字执行检查。并删除一个计数++以避免重复计算。
要忽略非法输入,您可以使用其他Scanner方法之一并读取String而不是int,然后尝试Integer.parseInt String并将解析包装到try catch中。
答案 4 :(得分:0)
//count++;
double avg = 0.0;
if (count != 0) {
avg = ((double) sum) / count;
}
System.out.println("Average : " + avg);
当除法的两边都是int
时,它是一个整数除法(结果int
,其余部分被抛弃)。
因此我们强制转换一边,这里sum
为浮点数:
(double) sum
然后它有效。