我希望我能在正确的位置张贴。
我对Java很陌生(这意味着这只是我在'hello world'之外的第三个程序)。
我有一个小费计算器,我正在为作业工作。我没有得到这样的'错误', 但是,分摊账单的方法似乎总是认为每个客户支付“无限”。 我的程序设置在两个类中:tipCalc1和tipCalc2(当然没有创意点)。 除了“无限”问题之外,该程序似乎没有问题。
这是我到目前为止所拥有的。任何帮助表示感谢,谢谢。
***TipCalc1 Class:***
import java.util.Scanner;
public class Tipcalc1
{
public static void main(String[] args)
{
System.out.println("Welcome to Tip Calculator! ");
TipCalc2 Calculator = new TipCalc2();
System.out.println("Please enter the bill amount: ");
TipCalc2.calBill();
System.out.println("What percentage would you like to tip?: ");
Calculator.percTip();
}
}
***And the tipCalc2 class which does the dirty work:***
import java.util.Scanner;
public class TipCalc2
{
static double bill;
double tip;
double total;
double split;
double splitPrompt;
double Y;
double N;
double billPerPerson;
static Scanner scan = new Scanner(System.in);
public static void calBill()
{
bill = scan.nextDouble();
}
public void percTip()
{
tip = scan.nextDouble();
if(tip<1)
{
total = bill * tip;
}
else total = bill * (tip/100);
System.out.println("Your total is: " + total);
Split();
}
public void Split()
{
System.out.println("Would you like to split the bill? ");
System.out.println("Enter 1 for YES or 0 for NO: ");
splitPrompt = scan.nextDouble();
if(splitPrompt == 0)
{
System.out.println("Your total is: " + total);
System.out.println("Thankyou. Goodbye.");
System.out.println("End Program");
}
if(splitPrompt == 1)
{
System.out.println("How many ways would you like to split the bill? ");
splitPrompt = scan.nextDouble();
billPerPerson = total / split;
System.out.println("Each person pays: " + billPerPerson);
System.out.println("Thankyou. Goodbye.");
System.out.println("End Program.");
}
else System.out.println("Invalid Entry");
}
}
答案 0 :(得分:3)
split
的默认值(因为您尚未使用其他值初始化)为0.0
,因此,当您执行
billPerPerson = total / split;
除以0.0
,因此您将获得Infinity
。
备注:强>
splitPrompt
是双倍且计算机无法以100%的准确度存储实际值,因此不应将其与0.0
进行比较。由于此变量将存储0
或1
作为输入,因此您可以将其声明为int
,这将是准确的。mixedCase
,对类/接口使用CamelCase
。在方法split()
中,您应该使用if-else if-else
结构:
if(splitPrompt == 0) {
...
}
else if(splitPrompt == 1) {
...
}
else {
...
}
答案 1 :(得分:1)
愚蠢的错误。
更改
System.out.println("How many ways would you like to split the bill?
splitPrompt = scan.nextDouble();
到
System.out.println("How many ways would you like to split the bill?
split = scan.nextDouble();
因为你永远不会改变分裂,就像所有双变量一样,它被初始化为0.0。
此外,您应该在适当的地方使用ints,因为并非所有数字都应该是双倍的。或者甚至更好,使用'y'和'n'字符。
答案 2 :(得分:0)
TipCalc2类
//Total = **bill** * (gets percentage in decimal 15 = 0.15) + **bill**
第18行必须为:
total = bill * (tip / 100) + bill;
第36/37行必须为:
split = splitPrompt = scan.nextInt();
billPerPerson = total / split;
//You're dividing billPerPerson = total by ZERO (split);
第36/37行原始:
billPerPerson = total / split;