这是一个无法编译的代码片段。我在最后一行收到错误,声称dots_per_page变量未初始化。当我将其设置为等于所示第一行的值时,此错误消失。我有什么东西可以俯瞰吗?我不认为我必须将它设置为声明时的值。
long dots_per_page;
if (print_type == 'T' || print_type == 't') {
dots_per_page = 5000;
}
else if (print_type == 'I' || print_type == 'i') {
dots_per_page = 10000;
}
else {
System.out.println("You did not provide a valid option.");
}
System.out.println(dots_per_page);
答案 0 :(得分:6)
您遇到dots_per_page
永远不会获得值的情况。如果print_type
不是'T'
,'t'
,'I'
或'i'
,则会打印"You did not provide a valid option"
并且未设置该值。
如果在第一行中设置了默认值,则此情况将具有默认值,并且一切正常。您还可以在上一个else
块中设置不同的值。
答案 1 :(得分:4)
很多这些答案都说你不能保留原始类型。这并非完全正确。您可以整天保留未设置的基本类型,但在设置之前,您不能使用该变量。您在dots_per_page
电话的最后一行使用了system.out.println
。如果删除该行,您还会看到您的代码将被编译。因此,您有多种方法可以解决此问题,或者为所有代码路径初始化变量,或者仅在已初始化的代码路径中使用该变量。
第二个选项的一个例子:
long dots_per_page;
if (print_type == 'T' || print_type == 't') {
dots_per_page = 5000;
System.out.println(dots_per_page);
}
else if (print_type == 'I' || print_type == 'i') {
dots_per_page = 10000;
System.out.println(dots_per_page);
}
else {
System.out.println("You did not provide a valid option.");
}
//System.out.println(dots_per_page); comment out this line
编辑:以及刚刚来到我的第三个选项:在else案例中退出你的方法
long dots_per_page;
if (print_type == 'T' || print_type == 't') {
dots_per_page = 5000;
}
else if (print_type == 'I' || print_type == 'i') {
dots_per_page = 10000;
}
else {
System.out.println("You did not provide a valid option.");
return;
}
System.out.println(dots_per_page);
答案 2 :(得分:3)
Java Tutorial: Primitive Data Types
声明字段时并不总是需要指定值。声明但未初始化的字段将由编译器设置为合理的默认值。一般来说,此默认值将为零或null,具体取决于数据类型。但是,依赖于这样的默认值通常被认为是糟糕的编程风格。
局部变量略有不同;编译器永远不会为未初始化的局部变量分配默认值。如果无法初始化声明它的局部变量,请确保在尝试使用它之前为其赋值。访问未初始化的局部变量将导致编译时错误。
答案 3 :(得分:1)
一开始就这样做:
long dots_per_page = 0;
所有局部变量必须在Java中显式初始化,编译器抱怨,因为有一个执行路径没有为变量赋值:如果else
条件成立,{{1}的值是多少}}?或者,您可以将其添加到dots_per_page
块:
else
重点是:无论运行什么执行路径,如果要读取本地变量,必须将总是分配给它。只有属性具有默认值。
答案 4 :(得分:1)
如果 print_type 是String,则需要使用双引号,并且需要使用“.equals()”方法来比较它们。如上所述,如果它是 char ,您的代码应该可以正常工作。
此外,如果结果不是“我”或“T”(或它们的小写版本), dots_per_page 在程序结束时没有值。
else {
System.out.println("You did not provide a valid option.");
dots_per_page = -1;
};
这样的事情(不可能的回报)会告诉你出了什么问题。
初始化您知道程序应该使用不应该更改的变量的变量,有助于显示程序是否正常运行。
答案 5 :(得分:0)
dots_per_page是primitive type,因此不允许取消设置。只是
使用long dots_per_page =0
;或者long dots_per_page = -1;
开头。
另一个选项是在dots_per_page = 0;
块中添加else
。
答案 6 :(得分:0)
else {
System.out.println("You did not provide a valid option.");
}
System.out.println(dots_per_page);
编码非常接近于工作。只有一个小错误。在if-else语句中,您打印出一条声明“您没有提供有效选项”。然后,打印出dots_per_page。但是,如果它已转到else语句,则无法打印dots_per_page。我建议在if-else语句的其他区域有一个print语句,你可以确定你有一个打印的dots_per_page
答案 7 :(得分:-1)
尝试将dots_per_page
设为空?声明我的意思。