gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:02:46 24 4
gpt4 key购买 nike

我在计算机科学专业学习第一年后,只使用 Python 学习 Java。我正在制作一个求解二次方程的基本程序。当程序中存在 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 语句,它就会正确编译。如果我给字符串输入默认值“”,它也可以正确工作(包含 if 语句)。为什么是这样?这看起来很基本,但我一生都无法弄清楚!

最佳答案

您声明了一个变量input,该变量直到 do-while block 的最后一个语句才被初始化。如果您在此语句之前引入 continue 的可能性,则在条件中引用时 input 可能会未初始化。

导致此错误的不是 if 语句;而是 if 语句。它是继续语句。

我会删除 continue 并将解决方案计算放在 else block 中以避免除以 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 并求解线性方程。

关于Java 以不同方式编译代码/变量在存在 if 语句时未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51312063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com