试图打印并得到:“无法解析为变量”错误

时间:2012-09-19 04:12:10

标签: java

我无法理解为什么在以下代码中:

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);          

因为它是先前定义的变量,甚至在变量旁边说明变量未被使用。我检查过我打印出来的时候和以前的代码一样。所以我不知道问题是什么。有人知道吗?

6 个答案:

答案 0 :(得分:1)

peaktimeWage的范围仅限于ifelse。在if else

之外声明它
int peaktimeWage = -1;
if (starttimeHours >=6 && starttimeHours <=9 ){
    peaktimeWage = 4;
} else if  (starttimeHours >=1 && starttimeHours <=5 ){
    peaktimeWage = 2;
}

答案 1 :(得分: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

答案 2 :(得分: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);
}

答案 3 :(得分: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;
}

答案 4 :(得分:0)

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

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

以上语句表示变量peaktimeWage的范围仅在if语句中。外面的任何陈述都不会看到变量的存在。

解决方案:if块之外定义变量,并可能修改此块中的值。

答案 5 :(得分:0)

在if块内声明了peaktimeWage。 这意味着它将在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);