我收到一个错误,说局部变量可能尚未初始化,或者无法解析为catch所在的变量。 我该怎么解决这个问题? 基本上,我希望我的程序接受一些数字,然后停下来并显示一些答案。
import java.util.Scanner;
public class math2{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter Integer Values\nEnter a Non-Integer When Finished\n");
int x = input.nextInt();
int max = x;
int min = x;
int sum = x;
double average = 0;
try
{
int amount = 1;
while(true)
{
x = Integer.parseInt(input.next());
sum = sum + x;
amount++;
average = (double)sum/amount;
if (x > max) {
max = x;
} else if (x < min) {
min = x;
}
}
}catch(NumberFormatException e){
System.out.println("The Maximum Value is " + max);
System.out.println("The Minimum Value Is " + min);
System.out.println("The Sum Is " + sum);
System.out.println("The Average Is " + average);}
}
}
答案 0 :(得分:6)
在try块之前声明下面的变量,因此这些也可以在catach块中使用
并将double average
初始化为某个默认值。
String x = input.next();
int y = Integer.parseInt(x);*emphasized text*
int max = y;
int min = y;
int sum = 0;
double average = 0;
更新
在您对相关内容进行编辑后,我发现您已收到InputMismatchException
,
如果你给非整数作为第一个输入。
为此,您可以捕获该异常以正常退出程序
将此代码替换为代码的int x = input.nextInt();
语句。
int x = 0;
try{
x = input.nextInt();
}catch(InputMismatchException ime){
//you cam use either of one statemnet.I used return statement
return ;
//System.exit(0);
}
答案 1 :(得分:2)
首先,在try
块旁边定义变量。如果您在try{}
内定义它,它将限定在try{...}
内,而catch(){}
块则不可见。
其次,您需要为average
提供一些初始值。永远不会使用默认值初始化局部变量。
double average = Double.NaN;
如果由于异常导致变量在while()
循环内从未初始化,该怎么办?
答案 2 :(得分:1)
因为您尚未初始化变量'average'。另外,我建议你在try catch块之外声明变量
答案 3 :(得分:0)
在try块之前声明max,min,average,sum变量。那些变量是本地的 try block ..如果你想在catch块中使用,那就把变量作为类成员。
答案 4 :(得分:0)
import java.util.Scanner;
public class math2{
static double average;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter Integer Values\nEnter a Non-Integer When Finished\n");
try
{
String x = input.next();
int y = Integer.parseInt(x);
int max = y;
int min = y;
int sum = 0;
int amount = 0;
while(true)
{
sum = sum + y;
y = Integer.parseInt(input.next());
amount++;
average = (double)sum/amount;
if (y > max) {
max = y;
} else if (y < min) {
min = y;
}
}
}catch(NumberFormatException e){
System.out.println("The Maximum Value is " + max);
System.out.println("The Minimum Value Is " + min);
System.out.println("The Sum Is " + sum);
System.out.println("The Average Is " + average);}
}
}
看到你在类级别声明变量,编译器会为你分配一个默认值...但是对于局部变量你需要分配它,如其他帖子中提到的那样