在Java ATM项目中使用If语句进行切换
现在我正在做一个ATM项目。 用户将输入他们的姓名、余额、交易类型和交易金额。交易类型有在Java ATM项目中使用If语句进行切换,java,if-statement,switch-statement,logic,Java,If Statement,Switch Statement,Logic,现在我正在做一个ATM项目。 用户将输入他们的姓名、余额、交易类型和交易金额。交易类型有取款(W),存款(D)和R(报告),我使用的是开关,有3个案例W,D,R。如果您输入错误的代码,您没有足够的资金进行您选择的交易类型,并且您输入的金额为负数,则程序将输出错误。现在,我很难设置开关。我的代码如下,任何帮助都将不胜感激!谢谢 import java.io.*; import java.util.*; public class atmValidator { public static vo
取款(W)
,存款(D)
和R(报告)
,我使用的是开关
,有3个案例
W
,D
,R
。如果您输入错误的代码,您没有足够的资金进行您选择的交易类型,并且您输入的金额为负数,则程序将输出错误。现在,我很难设置开关。我的代码如下,任何帮助都将不胜感激!谢谢
import java.io.*;
import java.util.*;
public class atmValidator {
public static void main(String[] args) {
String fname = " ", lname = " ";
double balbefore = 0.0, balafter = 0.0, transamount = 0.0;
char code = ' ';
Scanner screen = null;
FileInputStream fis = null;
FileOutputStream fos = null;
PrintWriter pw = null;
//Declaring the variables/scanner/etc.
try {
fis = new FileInputStream ("transactions.txt");
fos = new FileOutputStream ("statement.txt");
screen = new Scanner (fis);
pw = new PrintWriter (fos);
} catch (FileNotFoundException e) {
System.out.println("File not found");
System.exit(0);
}
//The try/catch for reading from the file
while (screen.hasNext()) {
fname = screen.next();
lname = screen.next();
balbefore = screen.nextDouble();
code = screen.next().charAt(0);
transamount = screen.nextInt();
//A while loop to gather the info from the file, and the variables getting their values from the files.
switch (code) {
case 'D':
balafter = balbefore + transamount;
if (transamount <0) {
pw.println("ERROR: Enter positive amount.");
}
else if (balafter < 300) {
pw.println("Warning, balance below $300");
}
{
// Where I am stuck at :(
}
}
}
screen.close();
pw.close();
}
}
//Sorry for the weird braces and spaces
import java.io.*;
导入java.util.*;
公共类atmValidator{
公共静态void main(字符串[]args){
字符串fname=“”,lname=“”;
双平衡前=0.0,平衡后=0.0,变速箱安装=0.0;
字符代码=“”;
扫描仪屏幕=空;
FileInputStream fis=null;
FileOutputStream=null;
PrintWriter pw=null;
//声明变量/scanner/etc。
试一试{
fis=新文件输入流(“transactions.txt”);
fos=新文件输出流(“statement.txt”);
屏幕=新扫描仪(fis);
pw=新的打印机(fos);
}catch(filenotfounde异常){
System.out.println(“未找到文件”);
系统出口(0);
}
//用于读取文件的try/catch
while(screen.hasNext()){
fname=screen.next();
lname=screen.next();
balbefore=screen.nextDouble();
代码=screen.next().charAt(0);
transamount=screen.nextInt();
//while循环从文件中收集信息,变量从文件中获取值。
开关(代码){
案例“D”:
平衡后=平衡前+变速箱安装;
如果(transamount您就快到了!在每一个案例之后,您需要继续使用break;
并移动到下一个案例
。最后,您需要有一个默认值:break
,它转换为“如果变量不适合任何案例,则中断开关”
所以开关的工作原理如下:
switch(code) {
case 'D':
// do deposit code
break;
case 'W':
// do withdrawl code
break;
...
default:
break;
}
case 'W':
tempBal = balbefore - transamount;
if(tempBal < 0) {
System.out.println("Insufficient Funds");
}
else {
balafter = balbefore - transamount;
if(balafter < 300) {
System.out.println("Warning, balance below $300");
}
}
break;
...
default:
System.out.println("Please select "D", "W", or "R");
break;
Switch有一种不同的语法,它没有大括号来定义代码块。它会查找中断;
和以下大小写:
或默认值:
继续
有很好的例子供你学习
评论后编辑:
针对您的评论,您需要执行以下操作:
switch(code) {
case 'D':
// do deposit code
break;
case 'W':
// do withdrawl code
break;
...
default:
break;
}
case 'W':
tempBal = balbefore - transamount;
if(tempBal < 0) {
System.out.println("Insufficient Funds");
}
else {
balafter = balbefore - transamount;
if(balafter < 300) {
System.out.println("Warning, balance below $300");
}
}
break;
...
default:
System.out.println("Please select "D", "W", or "R");
break;
案例“W”:
tempBal=balbefore-变速箱安装;
如果(温度<0){
System.out.println(“资金不足”);
}
否则{
balafter=balbefore-变速箱安装;
如果(巴拉弗特<300){
系统输出打印项次(“警告,余额低于300美元”);
}
}
打破
...
违约:
System.out.println(“请选择“D”、“W”或“R”);
打破
您可以在开关主体内部编写以下大小写。您可以进一步延长条件,但这里我只是给了您一个如何操作的示例。如果字符不是D、W或R,则将执行默认大小写
switch (code) {
case 'D':
balafter = balbefore + transamount;
System.out.println("");
if (balafter < 0) {
pw.println("Insufficent funds");
} else if (balafter < 300) {
pw.println("Warning, balance below $300");
}else{
pw.println("Well. You have now " + balafter + "$");
}
break;
case 'W':
balafter = balbefore - transamount;
if (transamount > balbefore) {
pw.println("Sorry. You don't enough funds.");
} else if (transamount <= balbefore && balafter < 300) {
pw.println("Warning, balance below $300");
} else {
pw.println("The withdrawl was successful.");
}
break;
case 'R':
balafter = balbefore + transamount;
if (balafter < 0) {
pw.println("Insufficent funds");
} else if (balafter < 300) {
pw.println("Warning, balance below $300");
} else {
pw.println("Good. Your balance is " + balAfter);
}
break;
default:
System.out.println("Nothing to do.");
break;
}
开关(代码){
案例“D”:
平衡后=平衡前+变速箱安装;
System.out.println(“”);
if(balafter<0){
pw.println(“资金不足”);
}否则,如果(平衡小于300){
pw.println(“警告,余额低于300美元”);
}否则{
println(“好吧,你现在有了”+balafter+“$”;
}
打破
案例“W”:
balafter=balbefore-变速箱安装;
如果(变速箱安装>平衡负载之前){
println(“对不起,你没有足够的资金。”);
}否则如果(我编辑了我的答案。在这个案例中,你几乎可以做任何你想做的事情。你可以在打印出balafter
之前进行验证检查。是的。我解释说,令人困惑的是,如果有人输入像Y这样的代码,我如何创建一个输出错误的开关。我会被要求为每个错误的代码做一个案例吗(基本上除了W、D、R之外的每个字母)或者有更好的方法吗?您是否有其他错误消息要打印出来以供其他选项使用?通常提款会出现错误,因为您可能会有负余额或低余额的危险。但我不认为将更多的钱存入您的帐户会导致错误消息。我编辑了我的答案以显示您的想法你需要这样做。基本上,如果balbefore-transamount
将导致负数,你甚至不想让用户取钱。但如果它清除了该条件,你可以继续进行交易,但之后,检查balafter
是否小于300,如果是,则打印警告消息。Th恩,你可以去休息一下。如果他是通过我们的指导而不是自己来解决的话,那会更具挑战性/