当if语句存在时,Java以不同方式编译代码/不初始化变量



我在计算机科学专业的第一年学习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"));

您可能还想检测判别式是否小于零,以表明没有真正的解决方案或给出复杂的解决方案。

您可能还想检测是否只有a0,并求解线性方程。

如果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"));
}

相关内容

  • 没有找到相关文章