0

我无法理解以下代码中的原因:

System.out.println("Enter start time");
String startTime = console.nextLine();
String [] tokens = startTime.split(":");
double starttimeHours = Double.parseDouble(tokens[0]);
double pickupMinutes = Double.parseDouble(tokens[1]);{
 if (starttimeHours >=6 && starttimeHours <=9 ){
 int peaktimeWage = 4;}
 else if  (starttimeHours >=1 && starttimeHours <=5 ){
  int peaktimeWage = 2;}

else {int peaktimeFare = 3;}{
  System.out.println(peaktimeWage);

我不断收到错误“peaktimeWage 无法解析为变量”。在最后一行代码是:

  System.out.println(peaktimeWage);          

因为它是之前定义的变量,甚至在上面的变量旁边说该变量没有被使用。打印出来时,我检查了我是否用与以前的代码相同的方式编写了它。所以我不知道问题是什么。有人知道吗?

4

6 回答 6

1

的范围peaktimeWage仅限于您的ifelse。把它贴在你的外面if else

int peaktimeWage = -1;
if (starttimeHours >=6 && starttimeHours <=9 ){
    peaktimeWage = 4;
} else if  (starttimeHours >=1 && starttimeHours <=5 ){
    peaktimeWage = 2;
}
于 2012-09-19T04:14:53.427 回答
0

peaktimeWage 在 if 块内声明。这意味着它将在 if 块结束时超出范围并被垃圾收集器清理。对于 peaktimeFare 变量,您也会遇到同样的问题

而是尝试

System.out.println("Enter start time");
String startTime = console.nextLine();
String [] tokens = startTime.split(":");
double starttimeHours = Double.parseDouble(tokens[0]);
double pickupMinutes = Double.parseDouble(tokens[1]);
{    
int peaktimeWage = 0;
int peaktimeFare = 0;
 if (starttimeHours >=6 && starttimeHours <=9 ){
 peaktimeWage = 4;}
 else if  (starttimeHours >=1 && starttimeHours <=5 ){
  peaktimeWage = 2;}

else {peaktimeFare = 3;}{
  System.out.println(peaktimeWage);
于 2012-09-19T04:18:18.373 回答
0

变量范围不正确。

改变你的

if (starttimeHours >=6 && starttimeHours <=9 ){
     int peaktimeWage = 4;
} else if  (starttimeHours >=1 && starttimeHours <=5 ){
      int peaktimeWage = 2;
}

int peaktimeWage = -1;
int peaktimeWage = -1;

if (starttimeHours >=6 && starttimeHours <=9 ){
  peaktimeWage = 4;
} else if  (starttimeHours >=1 && starttimeHours <=5 ){
  peaktimeWage = 2;
}
于 2012-09-19T04:16:15.293 回答
0

这与相关变量的范围有关。这是你写的:

if (starttimeHours >=6 && starttimeHours <=9 ){
 int peaktimeWage = 4;
}

上面的语句意味着变量peaktimeWage的范围只在if语句内。外面的任何语句都不会看到变量的存在。

解决方案:在块外定义变量,if并可能修改该块内的值。

于 2012-09-19T04:16:28.857 回答
0

您的问题是您没有定义peaktimeWage编译器可以肯定看到的任何地方。在编译时,编译器并不知道这些 if 语句中的任何一个都会被确定评估。

System.out.println("Enter start time");
String startTime = console.nextLine();
String [] tokens = startTime.split(":");
double starttimeHours = Double.parseDouble(tokens[0]);
double pickupMinutes = Double.parseDouble(tokens[1]);
int peaktimeWage = 0; // Have a default value in case it doesn't get set
if (starttimeHours >=6 && starttimeHours <=9 )
{
     peaktimeWage = 4;
}
else if (starttimeHours >=1 && starttimeHours <=5 )
{
     peaktimeWage = 2;
}
else
{
     int peaktimeFare = 3;
}
System.out.println(peaktimeWage); 

peaktimeFare考虑到仅在其他 if 语句为假时才定义它,您也会遇到问题。(除非peaktimeFare= peaktimeWage

于 2012-09-19T04:13:59.200 回答
0

它不是在环境中定义的,它是在if子句中定义的(所以这个变量的范围只在内部if或内部else if),所以一旦你完成了执行if- 它就不存在了......

顺便说一句-您缺少两个右括号}

将您的代码更改为:

int peaktimeWage = 0;
System.out.println("Enter start time");
String startTime = console.nextLine();
String [] tokens = startTime.split(":");
double starttimeHours = Double.parseDouble(tokens[0]);
double pickupMinutes = Double.parseDouble(tokens[1]);
{
 if (starttimeHours >=6 && starttimeHours <=9 ){
 peaktimeWage = 4;}
 else if  (starttimeHours >=1 && starttimeHours <=5 ){
  peaktimeWage = 2;}

 else {int peaktimeFare = 3;}
{
  System.out.println(peaktimeWage);
}
于 2012-09-19T04:14:28.823 回答