【问题标题】:Switch with If Statement Inside for Java ATM Project在 Java ATM 项目中使用 If 语句进行切换
【发布时间】:2015-10-20 14:41:26
【问题描述】:

现在我正在处理一个ATM 项目。 用户将输入他们的姓名、余额、交易类型和交易金额。交易类型为Withdraw (W)Deposit (D)R (Report),我用的是switch,有3个casesWDR。如果您出现以下情况,程序将输出错误: 输入错误代码,您没有足够的资金来进行您选择的交易类型,并且您输入的金额为负数。现在我很难设置switch。我的代码如下,任何帮助将不胜感激!谢谢

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

【问题讨论】:

    标签: java if-statement switch-statement logic


    【解决方案1】:

    您可以在开关体内编写如下案例。您可以进一步延长条件,但在这里我只是给您一个如何做的例子。如果字符不是 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;
        }
    

    【讨论】:

    • 如果他通过使用我们的指南而不是自己动手来解决这个问题,那将更具挑战性。 ://
    【解决方案2】:

    你快到了!在每个案例之后,您需要跟进break; 并转到下一个case。最后,您需要有一个default: break,它的意思是“如果变量不适合任何情况,则退出开关”。

    所以 switch 的工作方式如下:

    switch(code) {
        case 'D': 
            // do deposit code
            break;
        case 'W':
            // do withdrawl code
            break;
        ...
        default:
            break;
    }
    

    Switch 具有不同的语法,因为它没有花括号来定义代码块。它宁愿寻找 break; 和下面的 case:default: 继续前进。

    https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html 有很好的例子供你学习。

    评论后编辑:

    针对您的评论,您需要执行以下操作:

    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;
    

    【讨论】:

    • 我编辑了我的答案。您几乎可以在机箱内做任何您想做的事情。您可以在打印出balafter之前进行验证检查。
    • 是的。我解释说,如果有人输入像 Y 这样的代码,我怎么能创建一个会输出错误的开关。
    • 我是否需要为每个错误代码(基本上除了 W、D、R 之外的每个字母)做一个案例,还是有更好的方法?
    • 您是否还想为其他选项打印任何其他错误消息?通常提款应该给出错误,因为您可能面临余额为负数或余额不足的危险。但我认为向您的帐户存入更多资金不会导致错误消息。
    • 我编辑了我的答案以显示您需要做什么。基本上,如果balbefore - transamount 会导致负面结果,您甚至不想让用户取出钱。但如果它清除了该条件,您可以继续进行交易,但随后检查balafter 是否小于 300,如果是,则打印出警告消息。然后你就可以继续休息了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    相关资源
    最近更新 更多