我在计算机科学专业的第一年学习Java,专门使用Python。我正在制作一个求解二次方程的基本程序。当程序中存在if语句时,我遇到了一个变量未初始化的问题。以下是未编译的代码:
public class Test
{
public static void main(String[] args)
{
String input;
do
{
Scanner in = new Scanner(System.in);
System.out.println("A: ");
double a = in.nextDouble();
System.out.println("B: ");
double b = in.nextDouble();
System.out.println("C: ");
double c = in.nextDouble();
if ((a == 0) && (b == 0) && (c == 0))
{
System.out.println("No solutions to quadratic formual with these inputs!");
continue;
}
double d = b * b - 4*a*c;
double x1 = (-b - Math.sqrt(d)) / (2 * a);
double x2 = (-b + Math.sqrt(d)) / (2 * a);
System.out.println(x1);
System.out.println(x2);
System.out.println("Continue? ");
input = in.next();
}
while (input.equals("Y"));
}
}
如果我删除If语句,它将正确编译。如果我给String输入一个默认值",它也可以正常工作(包括If语句(。为什么会这样?这看起来很基本,但我一辈子都想不出来!
您已经声明了一个变量input
,该变量直到do-while块的最后一条语句才初始化。如果在此语句之前引入continue
的可能性,那么在条件中引用input
时可能会取消初始化。
导致此错误的不是if
语句;它是CCD_ 5语句。
我将移除continue
并将解计算放在else
块中以避免除以0。然后,我将确保要求用户继续的最后2条语句超过if/else,以确保在评估while
条件时input
已初始化。
if ((a == 0) && (b == 0) && (c == 0))
{
System.out.println("No solutions to quadratic formula with these inputs!");
}
else
{
double d = b * b - 4*a*c;
double x1 = (-b - Math.sqrt(d)) / (2 * a);
double x2 = (-b + Math.sqrt(d)) / (2 * a);
System.out.println(x1);
System.out.println(x2);
}
System.out.println("Continue? ");
input = in.next();
}
while (input.equals("Y"));
您可能还想检测判别式是否小于零,以表明没有真正的解决方案或给出复杂的解决方案。
您可能还想检测是否只有a
是0
,并求解线性方程。
if
语句的求值结果为true
(因为if
语句的主体包含一个continue
语句,它跳到while
循环迭代的末尾(,则input = in.next();
永远不会执行,因此while
循环的条件无法测试此变量(可能未初始化(。
您可以通过将输入初始化为空String
:来避免此错误
String input = "";
作为一种选择,如下更改逻辑可能更有意义,因为即使数字输入都是0
,您也可能希望显示"继续?"问题。
public static void main(String[] args)
{
String input;
do
{
Scanner in = new Scanner(System.in);
System.out.println("A: ");
double a = in.nextDouble();
System.out.println("B: ");
double b = in.nextDouble();
System.out.println("C: ");
double c = in.nextDouble();
if ((a == 0) && (b == 0) && (c == 0)) {
System.out.println("No solutions to quadratic formual with these inputs!");
} else {
double d = b * b - 4*a*c;
double x1 = (-b - Math.sqrt(d)) / (2 * a);
double x2 = (-b + Math.sqrt(d)) / (2 * a);
System.out.println(x1);
System.out.println(x2);
}
System.out.println("Continue? ");
input = in.next();
}
while (input.equals("Y"));
}