即使我知道它已被声明并初始化,我仍然会收到此错误cannot find symbol - variable minDist
。我觉得它直接盯着我的脸。有谁知道为什么会这样?
还有另一个类文件,但我不认为错误在那里。
当我到达minDist
时,我从第三行到最后一行得到它,但如果我删除minDist
,我也会在minCost
和minMPG
上获取它
public class AnnualFuelUseTester
{
public static void main(String[] args)
{
int sMiles1, sMiles2, sMiles3, sMiles4;
int eMiles1, eMiles2, eMiles3, eMiles4;
int[] dist = new int[4];
double gals1, gals2, gals3, gals4;
double[] MPG = new double[4];
double price1, price2, price3, price4;
double[] cost = new double[4];
AnnualFuelUse[] fillUps = {new AnnualFuelUse(108438, 108725, 13.9, 2.98),
new AnnualFuelUse(108738, 109023, 15.3, 3.02),
new AnnualFuelUse(109023, 109232, 10.3, 3.05),
new AnnualFuelUse(109564, 109854, 13.1, 3.03)};
for(int i = 0; i < fillUps.length; i++)
{
dist[i] = fillUps[i].calcDistance();
MPG[i] = fillUps[i].calcMPG();
cost[i] = fillUps[i].calcCost();
}
for (int i = 0; i < dist.length; i++)
{
int maxDist = 0;
int minDist = dist[0];
if (dist[i] > maxDist)
{
maxDist = dist[i];
}
if (dist[i] < minDist)
{
minDist = dist[i];
}
}
for (int i = 0; i < dist.length; i++)
{
double maxMPG = 0;
double minMPG = MPG[0];
if (MPG[i] > maxMPG)
{
maxMPG = MPG[i];
}
if (MPG[i] < minMPG)
{
minMPG = MPG[i];
}
}
for (int i = 0; i < dist.length; i++)
{
double maxCost = 0;
double minCost = cost[0];
if (cost[i] > maxCost)
{
maxCost = cost[i];
}
if (cost[i] < minCost)
{
minCost = dist[i];
}
}
System.out.printf("%15s%15s%15s%15s%15s%15s%15s%15s%15s\n\n"
,"Fill Up", "Days", "Start Miles", "End Miles"
,"Distance", "Gallons Used", "MPG", "Price", "Cost");
for(int i = 0; i < fillUps.length; i++)
{
System.out.printf("%15s%15s%15s%15s%15s%15s%15.2f%15s%15.2f\n"
,(i+1),(int)(1 + i *(i*1.1)), fillUps[i].getmySMiles()
,fillUps[i].getmyEMiles(), dist[i]
,fillUps[i].getmyGals(), MPG[i]
,fillUps[i].getmyPrice(), cost[i]);
}
System.out.printf("%10s%10s%30s%30s","Minimum",minDist,minMPG,minCost);
}
}
答案 0 :(得分:5)
你在minDist
循环中声明for
,所以它只存在于那里,你不能在循环之外使用它。
答案 1 :(得分:4)
您在for循环的范围内声明它。您需要将int minDist
的声明移到该循环之外,与您正在执行printf的级别相同。
答案 2 :(得分:2)
始终考虑声明变量的范围,因为它决定了变量的可见性。
您在作为范围的for-block中声明您的变量。然后,您试图从声明它们的范围之外引用这些变量。那不行。
public void foo () {
while (someBool) {
int someVariable = 0;
someVariable = 1 // works because using and declaring takes place in the same scope.
}
someVariable = 2; // that won't work because variable is not existent in this scope.
}
还要考虑范围可以是分层结构的,这意味着在某个范围内声明的变量在所有嵌套范围内也是可见的:
public void foo () {
while (someBool) {
int aVariable = 0;
if (anotherBool) {
aVariable = 1; // works because this scope is a nested scope inside the scope where the variable has been declared.
}
}
}
您将找到大量有关范围概念的信息,这些信息不仅用于C#,而且用于大多数编程语言。
开始研究的一点可能是MSDN文档:
http://msdn.microsoft.com/en-us/library/aa691132(v=vs.71).aspx
答案 3 :(得分:1)
你在循环中声明了minDist
变量,因此该变量的范围仅限于循环的特定范围。
所以你无法在外面访问该变量。
答案 4 :(得分:0)
基本上,既然你说过
int minDist = dist[0];
在 for 循环中,它只存在于循环中。例如,
for(int i = 0; i < 10; i++) {
int x = 0;
}
System.out.println(x);
会返回错误,因为x不在该循环之外。它被称为范围,基本上是不同的隐形级别。想象一下,电影 - 第二级梦中的人们知道第一级的梦想是什么,但是第一级别看不到第二级。因此:
int x = 5;
for(int i = 0; i < 1; i++) {
x = 3;
int y = 10;
}
System.out.println(x);
System.out.println(y);
将成功打印3但在尝试打印y时崩溃,因为简单地说,他们无法在for循环之外看到y。
要解决您的问题:只需在循环之外的某个地方声明minDist,它应该可以正常工作。