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

标签 java compiler-errors initialization

我在计算机科学专业学习第一年后,只使用 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/

相关文章:

c++ - 在 C++ 中使用文件句柄的条件

java - 在 Java 中反转 utf-8 字符串

c++ - Qt Creator编译器配置问题visual studio 2017

java - 异常处理错误

module - 从多个项目导入 D 模块

php - 如果未设置变量,则使用函数初始化变量 - PHP

c++ - 初始化对象时丢弃placement new返回值是否可以

java - fatal error 和非致命运行时错误有什么区别?

Java - 如何在数组中存储大量值

java - 我为 JFormattedTextField 制作的 NumberFormatter 函数不允许输入十进制数字