我无法理解为什么在以下代码中:
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);
因为它是先前定义的变量,甚至在变量旁边说明变量未被使用。我检查过我打印出来的时候和以前的代码一样。所以我不知道问题是什么。有人知道吗?
答案 0 :(得分:1)
peaktimeWage
的范围仅限于if
和else
。在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);