Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java ATM项目中使用If语句进行切换_Java_If Statement_Switch Statement_Logic - Fatal编程技术网

在Java ATM项目中使用If语句进行切换

在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

现在我正在做一个ATM项目。 用户将输入他们的姓名、余额、交易类型和交易金额。交易类型有
取款(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恩,你可以去休息一下。如果他是通过我们的指导而不是自己来解决的话,那会更具挑战性/