gpt4 book ai didi

java - 调试变量时遇到问题可能未初始化错误

转载 作者:搜寻专家 更新时间:2023-10-31 19:41:59 24 4
gpt4 key购买 nike

我在文件中看到了很多类似的问题,但我找不到像我遇到的问题那样的场景。

下面是我的代码。我遇到了“finalPrice”和“grandTotalPrice”可能尚未初始化的错误。代码行接近程序的末尾。

应该通过上面的控制台输入为变量分配总数。我不确定错误是什么,或者为什么。任何人都可以请帮助我,并解释一下吗?

代码:

import java.util.*;


public class PictureFrames
{

static Scanner console = new Scanner(System.in);

static final double REGULAR_FRAME = .15, FANCY_FRAME = .25;
static final double COLOR = .10, CARDBOARD = .02, GLASS = .07, CROWNS = .35;


public static void main (String[] args)
{

double length, width, area, perimeter;
double priceOfFrame, priceOfColor, priceOfCardboard, priceOfGlass, priceOfCrowns, finalPrice, crownFinalPrice, grandTotalPrice;
int numberOfCrowns;
char typeOfFrame, choiceOfColor, choiceOfCrowns;



System.out.println ("Please enter the length of your picure in inches:");
length = console.nextDouble();

System.out.println ("Please enter the width of your picure in inches: ");
width = console.nextDouble();

System.out.println ("Please enter the type of frame: R or r (Regular), F or f (Fancy). ");
typeOfFrame = console.next().charAt(0);

System.out.println ("Would you like to add color?: Y for (Yes), N for (No): ");
choiceOfColor = console.next().charAt(0);


switch (typeOfFrame)
{
case 'R':
case 'r':
if (choiceOfColor == 'N')
{
area = (length * width);
perimeter = (2 * length) + (2 * width);
priceOfFrame = (perimeter * REGULAR_FRAME);
priceOfCardboard = (area * CARDBOARD);
priceOfGlass = (area * GLASS);
finalPrice = (priceOfFrame + priceOfCardboard + priceOfGlass);
break;
}
else if (choiceOfColor == 'Y')
{
area = (length * width);
perimeter = (2 * length) + (2 * width);
priceOfColor = (area * COLOR);
priceOfFrame = (perimeter * REGULAR_FRAME);
priceOfCardboard = (area * CARDBOARD);
priceOfGlass = (area * GLASS);
finalPrice = (priceOfFrame + priceOfColor + priceOfCardboard + priceOfGlass);
break;
}
case 'F':
case 'f':
if (choiceOfColor == 'N')
{
area = (length * width);
perimeter = (2 * length) + (2 * width);
priceOfFrame = (perimeter * FANCY_FRAME);
priceOfCardboard = (area * CARDBOARD);
priceOfGlass = (area * GLASS);
finalPrice = (priceOfFrame + priceOfCardboard + priceOfGlass);
break;
}
else if (choiceOfColor == 'Y')
{
area = (length * width);
perimeter = (2 * length) + (2 * width);
priceOfColor = (area * COLOR);
priceOfFrame = (perimeter * FANCY_FRAME);
priceOfCardboard = (area * CARDBOARD);
priceOfGlass = (area * GLASS);
finalPrice = (priceOfFrame + priceOfColor + priceOfCardboard + priceOfGlass);
break;
}

}

System.out.println ("Would you like to add crowns? Enter Y (Yes), or N (No): ");
choiceOfCrowns = console.next().charAt(0);

if (choiceOfCrowns == 'Y')
{
System.out.println ("How many crowns would you like? ");
numberOfCrowns = console.nextInt();
crownFinalPrice =(numberOfCrowns * CROWNS);
grandTotalPrice = (crownFinalPrice + finalPrice);
}
else if (choiceOfCrowns == 'N')
System.out.printf ("Your total comes to: $%.2f%n", grandTotalPrice);

}

}

最佳答案

如果 typeOfFrame 不是 R、r、F 或 f,会发生什么?
一种可能的解决方案是向开关添加“默认”情况。

我认为这段代码更接近你想要的(我减少了很多重复)。请注意,我并没有真正处理错误(对 isValidChoice 和 isFrameType 方法的调用是如何处理它们的开始)。上面的问题是,您基本上假设用户只会输入有效的输入,而忘记了有时即使 Y 和 N 是他们可以在 Q 中输入的唯一有效选项。我还修复了一个错误您并不总是打印出总计,也没有设置总计(printf 上方的最后一部分)。

我的最后一个建议是不要为此使用 double (除非你的教练告诉你),因为在某些情况下他们会给你不准确的数字。看看 java.math.BigDecimal 吧。

class Main
{
static Scanner console = new Scanner(System.in);
static final double REGULAR_FRAME = .15;
static final double FANCY_FRAME = .25;
static final double COLOR = .10;
static final double CARDBOARD = .02;
static final double GLASS = .07;
static final double CROWNS = .35;

public static void main (String[] args)
{
final double length;
final double width;
final char typeOfFrame;
final char choiceOfColor;

System.out.println ("Please enter the length of your picure in inches:");
length = console.nextDouble();

System.out.println ("Please enter the width of your picure in inches: ");
width = console.nextDouble();

System.out.println ("Please enter the type of frame: R or r (Regular), F or f (Fancy). ");
typeOfFrame = console.next().charAt(0);

System.out.println ("Would you like to add color?: Y for (Yes), N for (No): ");
choiceOfColor = console.next().charAt(0);

if(!(isFrameType(typeOfFrame)))
{

}
else
{
final double area;
final double perimeter;
final double priceOfFrame;
final double priceOfCardboard;
final double priceOfGlass;

area = (length * width);
perimeter = (2 * length) + (2 * width);
priceOfFrame = (perimeter * REGULAR_FRAME);
priceOfCardboard = (area * CARDBOARD);
priceOfGlass = (area * GLASS);

if(isValidChoice(choiceOfColor))
{
final double priceOfColor;
final double finalPrice;
final char choiceOfCrowns;
final double grandTotalPrice;

if(choiceOfColor == 'N')
{
finalPrice = (priceOfFrame + priceOfCardboard + priceOfGlass);
}
else
{
priceOfColor = (area * COLOR);
finalPrice = (priceOfFrame + priceOfColor + priceOfCardboard + priceOfGlass);
}

System.out.println ("Would you like to add crowns? Enter Y (Yes), or N (No): ");
choiceOfCrowns = console.next().charAt(0);

if(isValidChoice(choiceOfCrowns))
{
if(choiceOfCrowns == 'Y')
{
final double crownFinalPrice;
final int numberOfCrowns;

System.out.println ("How many crowns would you like? ");
numberOfCrowns = console.nextInt();
crownFinalPrice =(numberOfCrowns * CROWNS);
grandTotalPrice = (crownFinalPrice + finalPrice);
}
else
{
grandTotalPrice = finalPrice;
}

System.out.printf ("Your total comes to: $%.2f%n", grandTotalPrice);
}
}
}
}

private static boolean isFrameType(final char c)
{
final char lower;

lower = Character.toLowerCase(c);

return (lower == 'r' || lower == 'f');
}

private static boolean isValidChoice(final char c)
{
return (c == 'Y' || c == 'N');
}
}

关于java - 调试变量时遇到问题可能未初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4001767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com