0

我已经开始学习 Java 编程,但在做作业时遇到了问题:ps 这是 ac 编程作业,用它来做 java 编程:

考虑一个(可能是大型商业)房间,其地板尺寸长度为 len 和宽度为 wd。地板的面积由 len 乘以 wid 得出。

地毯砖以单独的正方形(2 英尺乘 2 英尺)的形式提供。编写、编译和运行一个 C 程序,carpet.c,它

- 计算从终端输入尺寸(len 和 wid)(测量单位为英寸)的房间所需的最小地毯块数。注意:可以切割地砖以适合房间的边缘 - 尽量减少浪费。

- 计算需要多少个方块地毯包。供应商只提供十个一包的方块地毯(即不能单独购买单个方块)。

- 计算购买了最少数量的包后剩余的备用瓷砖数量。

- 将所有这些结果连同订单的总成本打印在一张整洁的表格中。(前四包每包瓷砖的价格为 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

您需要 通过替换当前行来初始化变量packCost :

int packCost;

经过

int packCost=0;

您正在条件语句中初始化您的 packCost 变量,而编译器不够聪明,无法检测到它。

于 2012-09-06T18:34:37.960 回答
1

您需要初始化packetCost

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

使用 else 而不是 else-if 可以使编译器清楚地知道将执行其中一个条件,因此始终设置 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 回答