繁体   English   中英

与变量初始化混淆

[英]Confusion with variable initialization

这是一个无法编译的代码片段。 我在最后一行收到错误,声称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);

你有一个dots_per_page永远不会获得值的情况。 如果print_type不是'T''t''I''i' ,则打印"You did not provide a valid option"并且未设置该值。

如果在第一行中设置默认值,则此情况将具有默认值,并且一切正常。 您还可以在最后一个else块中设置不同的值。

很多这些答案都说你不能保留原始类型。 这并非完全正确。 您可以整天保留原始类型,但在设置之前不能使用该变量。 您正在使用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);

Java教程:原始数据类型

声明字段时并不总是需要分配值。 声明但未初始化的字段将由编译器设置为合理的默认值。 一般来说,此默认值将为零或null,具体取决于数据类型。 然而,依赖于这样的默认值通常被认为是糟糕的编程风格。

数据类型默认值

局部变量略有不同; 编译器永远不会为未初始化的局部变量分配默认值。 如果无法初始化声明它的局部变量,请确保在尝试使用它之前为其赋值。 访问未初始化的局部变量将导致编译时错误。

在开始时这样做:

long dots_per_page = 0;

必须在Java中显式初始化所有局部变量,编译器抱怨,因为有一个执行路径没有为变量赋值:如果else条件成立,则dots_per_page的值是dots_per_page 或者,您可以将其添加到else块:

else {
    dots_per_page = 0;
}

重点是:无论运行什么执行路径,如果要读取本地变量,则必须始终为其赋值。 只有属性具有默认值。

如果print_type是String,则需要使用双引号,并且需要使用“.equals()”方法来比较它们。 如上所述,如果它是一个char,你的代码应该正常工作。

此外,如果结果不是“I”或“T”(或它们的小写版本),则dots_per_page在程序结束时没有值。

else {
    System.out.println("You did not provide a valid option.");
    dots_per_page = -1;
};

这样的事情(不可能的回报)会告诉你出了什么问题。

初始化变量,您知道您的程序应该更改为不应该的值,有助于显示您的程序是否正常运行。

dots_per_page是原始类型 ,因此不允许取消设置。 只需使用long dots_per_page =0 ; 或者long dots_per_page = -1; 在开始。

另一种选择是添加dots_per_page = 0; 在你的else块中。

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来打印

尝试将dots_per_page设置为null? 声明我的意思是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM