我是一个初学者,我写了一个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);
}
}
}
}
}
试试这个:
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。我已经将这两个if语句包含在当循环中,因此它们实际上可以工作。
3。我已经捕获了所有可能的错误所以您不应该看到任何错误消息
注:这已经过测试
你可能会想要
if(number > max) {
max = number;
}
if(number < min) {
min = number;
}
在while循环中,因为现在您只检查最后一次读取的值(而且,不需要增加计数器来退出循环(在您读取了-5之后,顺便说一下,为什么是-5?o.o)。
此外,您可能希望以这种方式初始化最小值/最大值,因为如果最小值大于0,代码将输出0。如果最大值低于0,则情况也是如此:
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
对于非整数部分:读取异常,并使用一个try-catch
块来捕获InputMismatchExc0019。
try {
//while(scan.nextInt) here
} catch (InputMismatchException e) {
//Do something here, like print something in the console
}
正如其他人指出的那样,如果您不想截断平均值,请将sum转换为double:((double)sum)/count
。
最后,但最重要的是:在问别人之前,试着自己调试它。
为了在循环中获得整数输入,响应“退出”值,并防止无效输入,我会使用类似下面模板的东西。
请注意,到目前为止没有一个答案提到的关键问题是,仅仅捕获InputMismatchExc0019
是不够的。您还必须调用扫描仪对象的nextLine()
方法来清除缓冲区中的错误输入。否则,错误的输入将在无限循环中重复触发相同的异常。根据具体情况,您可能希望使用Next()
来代替,但是要知道像this有空格
这样的输入会生成多个异常。
代码
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...
我正在尝试通过单行输入检索用户输入:例如,使用扫描仪分隔符为Comma5,6,4,8,9。如何使用这种类型的输入检索任意数量的整数?也就是说,不必询问用户希望输入多少个整数。下面是我一直在使用的代码,但是当我想中断时,不能中断while循环。请注意,我保留System.Out以跟踪程序当前运行的位置。令人困惑的是,我可以以这种格式获得用户输入,但程序停止并再次要求用户输入,然后如果输入是一个整数,
问题内容: 请问我关于扫描仪的问题;我在一家小公司工作;我们有一个软件;它生成一个大文本文件;而且我们必须从中得到一些有用的信息; 我想用Java编写一个简单的应用程序以节省时间;你能指导我吗? 例如我要这个输出; 输出量 RFID:25蓝色:562 WifiID:2610 RFID:33 RFID数量:2 例如;这是我的文本文件,因为使用我们的软件生成的每个文件都有14000行:) 我用此源代码
我正在创建一个用于处理用户输入的类。这样,在其他项目中,我可以从类中调用方法,而不必担心在每个新项目中创建扫描程序。 类中将有一个单独的方法来处理不同的变量类型(float、int、String等)。我从浮动类型开始: 这个方法工作得很好,只是它必须在else部分返回一个float。在本例中,它是一个零,因此当输入到计算器(例如)时,零会导致任何输出等于零。 有没有返回空浮点值的方法来克服这个问题
所以,我被这段代码困住了: 这是我的输出: 插入一个整数:< br >无效值!< br >插入一个整数:< br >无效值!< br >...
对于作业,我必须编写以下代码: 当我尝试编译它时,它在命令提示符下给了我3个错误,说“无法解析符号,符号:类扫描仪,位置:类单词,扫描仪用户输入=新扫描仪(System.in)”。我不确定错误在哪里。我应该使用BufferedReader作为输入吗?
问题内容: 我正在尝试让扫描仪在循环中进行输入。一旦用户想要完成操作,他就可以退出此循环。我尝试了许多不同的方法来执行此操作,但始终存在一些问题。这是代码: 上面代码的问题(在我尝试的其他方法上也会发生)是,当用户键入 Y时 ,将跳过名字的第一个输入,并跳转到姓氏。如果用户键入 N, 则循环将正确停止。有人可以解释发生这种情况的原因,以及如何克服使用课堂的问题? ps:执行类似的操作,将导致循环终