0

私は Java プログラミングの学習方法を開始しましたが、割り当てを行っているときに問題が発生しました: ps これは ac プログラミング割り当てであり、それを使用して Java プログラミングを行います:

床の寸法が長さ len と幅 wid の (潜在的に大きな商業用の) 部屋を考えてみましょう。床の面積は、len に wid を掛けて得られます。

カーペット タイルは、個々の正方形 (2 フィート x 2 フィート) として提供されます。C プログラム、carpet.c を書き、コンパイルし、実行します。

-端末から入力された寸法 (len と wid) の部屋を覆うために必要なカーペット タイルの最小数を計算します (測定値はインチ単位です)。注意: 床タイルは部屋の端に合わせてカットできます。無駄を最小限に抑えてください。

-必要なカーペット タイル パックの数を計算します。サプライヤは、10 個入りパックのカーペット タイルのみを提供します (つまり、個々のタイルを個別に購入することはできません)。

- パックの最小数が購入された後、残っているスペア タイルの数を計算します。

-これらすべての結果を、注文の合計費用とともにきちんとした表に出力します。(タイルのパックは、最初の 4 つのパックごとに 50 ドルかかり、その後のパックごとに価格が 45 ドルに下がります。)

プログラムをどのようにテストするかを慎重に検討してください。計算は自明ではなく、間違いやすいです。あなたのプログラムが動かなければ、あなたは会社に多額のお金を浪費し、ソフトウェアを供給する契約を失うことになるでしょう。

発生する可能性のあるさまざまな可能性をすべてカバーする多数のテスト ケースを (手動で) 書き出す必要があります。さまざまな境界ケースも考慮することを忘れないでください。これらは、多くの場合、エラーが検出される場所です。

これまでのところ、私はやっています:

import java.util.Scanner;

public class carpet {
    public static void main (String args[]){
    Scanner scanf = new Scanner (System.in);

        float len, wid;
        float area;

        int roundTiles;
        int roundPacks;

        float tarea;
        float tpack;
        float NoOfTiles;
        float NoOfPacks;
        float tspares1;
        float tspares2;
        int packCost;
        int cost;

        tarea= 12* 12;
        tpack= 10;

        System.out.format("Enter the length of the room, Inches: ");
        len = scanf.nextFloat();

        System.out.format("Enter the width of the room, Inches: ");
        wid = scanf.nextFloat();

        area = len * wid;

        NoOfTiles = area/ tarea;
        NoOfPacks = NoOfTiles/tpack;


        roundTiles = (int) Math.ceil(NoOfTiles);
        roundPacks = (int) Math.ceil(NoOfPacks);



        tspares1 = roundPacks * 10;
        tspares2 = tspares1 - roundTiles;

        if (roundPacks <= 4)
            packCost =50;
        else if(roundPacks > 4)
        {
            packCost = 45;
            packCost = packCost + 20;   *<<-----******LINE 50-----*********

        }


        cost =roundPacks * packCost; *<<*******---ERROR-------------*********

        System.out.println(cost);

        }

}

エラーは次のとおりです: 「ローカル変数 packCost が初期化されていない可能性があります」

そして、コンパイラは次のように述べています: 「スレッド "main" java.lang.Error での例外: 未解決のコンパイルの問題: ローカル変数 packCost は、carpet.main(carpet.java:50) で初期化されていない可能性があります」

4

4 に答える 4

1

初期化する必要がありますpacketCost

int packCost = 0;
于 2012-09-06T18:33:08.833 に答える
1

現在の行を置き換えることにより、変数packCostを初期化する必要があります。

int packCost;

int packCost=0;

条件ステートメントでpackCost変数を初期化していますが、コンパイラーはそれを検出するのに十分なほど賢くありません。

于 2012-09-06T18:34:37.960 に答える
1

else-if の代わりに else を使用すると、条件の 1 つが実行されることがコンパイラーに明確になるため、packCost は常に設定されます。

if (roundPacks <= 4)
    packCost = 50;
else
{
    packCost = 45;
    packCost = packCost + 20;
}
于 2012-09-06T18:40:01.237 に答える
0

Java では、ローカル変数を初期化する必要があります。これがフィールド変数の場合、暗黙のデフォルト値は 0 (ゼロ) になります。

これを説明するリンクは次のとおりです: http://www.janeg.ca/scjp/lang/defaults.html (免責事項: 私のページではありません)

このページから:

  • フィールド変数 (クラス メンバー) は自動的に既定値に初期化されます。
  • ローカル変数 (メソッドまたはコンストラクター変数) は自動的に初期化されません
于 2012-09-06T18:37:07.273 に答える