【发布时间】:2017-10-17 22:08:53
【问题描述】:
TL;DR 在底部
我目前正在我的社区大学学习编程 1,我刚刚收到关于几周前上交的实验室的反馈。据说,有一个地方我犯了错误,但我不确定是不是错误。
一些背景知识:在我们的实验室中,我们应该编写一个程序来收集和计算用户在几个小时内赚取的总收入,然后扣除必要百分比的所得税、购买商品的钱、债券等。
实验室的部分说明要求我们“将税收、衣服、学校用品、储蓄债券和父母储蓄债券的值定义为‘恒定’(在课堂上此时定义为 final)。”
为了节省空间,我决定继续计算常量本身中每个项目的总值,而不是只将百分比放入常量中并稍后调用它们。
然而,根据我的教授的说法,这个选择是错误的,因为它没有正确声明我的常量。假设,应该存储在常量中的唯一东西是纯数字(即,只是百分比);通过尝试在我的初始化中包含和计算变量,我有效地破坏了我的代码,因为常量将永远将第一个计算锁定到位,并且如果再次运行代码将无法计算新的数字/变量(注意:我刚刚通过一个循环运行程序,看看这是否正确,它仍然可以正常工作。
如果我错了,就这样吧,我最终还是学到了一些东西。但如果不是,我想知道。
这是有问题的代码;你有什么想法?
import javax.swing.JOptionPane;
import java.text.DecimalFormat;
public class Lab2C
{
static DecimalFormat form = new DecimalFormat("$#0.00");
public static void main (String[] args)
{
//Declare variables
String input;
String output;
double payRate=0;
double hourWrk=0;
double income;
//"for" loop to collect user input
for (int count=0;count!=2;count++)
{
if (count==0)
{input=JOptionPane.showInputDialog("Please enter your hourly pay: ");
payRate=Double.parseDouble(input);
}
else if (count==1)
{input=JOptionPane.showInputDialog("Please enter your total hours "
+ "worked for the past month: ");
hourWrk=Double.parseDouble(input);
}
}
//Calculate and output final numbers
income = payRate*hourWrk;
//Declare the constants
final double taxed = income-(.14*income); // <---------
final double cloth = .1*taxed; //The portion of code my
final double supp = .01*taxed; //prof took issue with
final double myBond = .25*taxed; // <---------
final double prntBond = .5*myBond;
output =
"Total Income (before tax): " + form.format(income) + "\n" +
"Total Income (after tax): " + form.format(taxed) + "\n" +
"----------------------------------------" + "\n" +
" Funds spent on Clothes: " + form.format(cloth) + "\n" +
" Funds spent on School Supplies: " + form.format(supp) + "\n" +
" Funds spent on Savings Bonds: " + form.format(myBond) + "\n" +
" Parent's funds spent on Savings Bonds: " + form.format(prntBond) + "\n" +
"----------------------------------------" + "\n" +
"Total Remaining Funds: " + form.format(taxed-(cloth+supp+myBond+prntBond));
JOptionPane.showMessageDialog(null, output);
}
}
TL;DR - 我如何初始化/使用我的常量是否存在任何重大问题?
【问题讨论】:
-
我没有在您的代码中看到常量。常量应该是在类级别声明的“最终静态”变量。
-
是的,我不确定它们在技术上是否被认为是“常量”,但
final double变量是我们的教授希望我们定义常量变量的方式(矛盾,我知道) 在课堂上。 -
@JoshMac 阅读答案更新
-
你使用它的方式不是“常量”。然而,代码也没有错。一些 IDE 可以选择查看您的代码并在可能的情况下添加
final。对于 lambdas,Java 甚至现在也使用“有效最终”一词。 Java 是否真的有常量的概念值得商榷。 -
你的代码很不错。你的变量没有问题。事实上,使用最终变量(一次写入变量)可能被认为是最佳实践!您的教授可能会将它们与 C 或 C++ 静态变量混淆,这些静态变量确实永远保持其值,即使跨函数调用也是如此。教授不完全精通他们教授的语言并不罕见。