0

cannot find symbol - variable minDist宣言されて初期化されていることがわかっていても、このエラーが発生し続けます。真っ直ぐに見つめているような気がします。なぜこれが起こっているのか誰かが知っていますか?

これに付随する別のクラスファイルがありますが、エラーはそこにあるとは思いません。

に到達すると、最後から3行目に取得しますがminDist、削除すると、同様minDistに取得します。minCostminMPG

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

5 に答える 5

5

minDistループ内で宣言したforため、ループ内にのみ存在し、ループ外では使用できません。

于 2012-12-19T01:26:21.653 に答える
4

forループのスコープ内で宣言しています。int minDistそのループの外側の宣言を、printfを実行しているのと同じレベルに移動する必要があります。

于 2012-12-19T01:26:21.010 に答える
2

変数の可視性が決まるため、変数を宣言するスコープを常に考慮してください。

スコープである for ブロック内で変数を宣言します。次に、宣言したスコープの外からこれらの変数を参照しようとしています。それはうまくいきません。

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

于 2012-12-19T01:29:34.753 に答える
1

ループ内で変数を宣言しminDistたため、その変数のスコープはその特定の for ループに限定されました。

その変数に外部からアクセスすることはできません。

于 2012-12-19T01:46:58.883 に答える
0

基本的に、あなたが言ったので

int minDist = dist[0];

forループでは、ループ内にのみ存在します。例えば、

for(int i = 0; i < 10; i++) {
    int x = 0;
}
System.out.println(x);

x がそのループの外にないため、エラーが返されます。これはスコープとして知られており、基本的にさまざまなレベルの不可視性です。映画の始まりのように考えてみてください。第 2 レベルの人々は第 1 レベルの夢が何であるかを知っていますが、第 1 レベルは第 2 レベルを見ることができません。したがって :

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 を宣言するだけで、開始近くのどこかで機能するはずです。

于 2012-12-19T02:10:06.920 に答える