Java以不同方式编译代码/存在if语句时不初始化变量
在我主修计算机科学的第一年之后,我专门使用Python学习Java。我正在做一个解二次方程的基本程序。当程序中存在if语句时,我遇到变量未初始化的问题。以下是未编译的代码:Java以不同方式编译代码/存在if语句时不初始化变量,java,compiler-errors,initialization,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);
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=in.next()如果if
语句的计算结果为true
(因为if
语句的主体包含一个continue
语句,该语句在while
循环的迭代过程中跳过到的末尾),因此while
循环的条件无法测试该变量(可能未初始化)
通过将输入初始化为空的字符串
,可以避免此错误:
String input = "";
另一种选择是,如下更改逻辑可能更有意义,因为即使数字输入都是0
,您也可能希望显示“Continue?”问题
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"));
}
input=in.next()如果if
语句的计算结果为true
(因为if
语句的主体包含一个continue
语句,该语句在while
循环的迭代过程中跳过到的末尾),因此while
循环的条件无法测试该变量(可能未初始化)
通过将输入初始化为空的字符串
,可以避免此错误:
String input = "";
另一种选择是,如下更改逻辑可能更有意义,因为即使数字输入都是0
,您也可能希望显示“Continue?”问题
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"));
}
您已经声明了一个变量input
,该变量直到do while块的最后一个语句才初始化。如果在此语句之前引入了continue
的可能性,则在条件中引用时,input
可能会被取消初始化
导致此错误的不是if
语句;这是continue
语句
我会删除continue
并将解算放在else
块中,以避免除以0。然后,我将确保请求用户继续的最后两条语句已超过if/else,以确保在计算while
条件时输入
已初始化
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
,并求解线性方程。您声明了一个变量输入
,该变量直到do while块的最后一个语句才初始化。如果在此语句之前引入了continue
的可能性,则在条件中引用时,input
可能会被取消初始化
导致此错误的不是if
语句;这是continue
语句
我会删除continue
并将解算放在else
块中,以避免除以0。然后,我将确保请求用户继续的最后两条语句已超过if/else,以确保在计算while
条件时输入
已初始化
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
,并求解线性方程