java - 应用程序忽略 Scanner.nextLine() 方法之后的输入

标签 java string input java.util.scanner string-comparison

我是java新手,我决定编写一个简单的程序来练习IF。这是它应该做的事情:

  1. 询问用户有关货币的信息。
  2. 询问用户想要转账的金额。
  3. 计算佣金率并向用户显示详细信息。
  4. 请求用户确认;如果他输入“y”,程序应该打印“A”。如果他输入“n”,程序应该打印“B”。

代码如下:

import java.util.Scanner;

public class CommissionRate {

static String Confirm;
static byte CommissionRate=10;
static String Commission="1%.";
static double TotalCost;
static double MoneyAmount;
static byte CurrencyNum;
static char CurrencySign;
static Scanner sc = new Scanner(System.in);
public static void Currency(){

    System.out.println("Please choose your desired currnecy.");
    System.out.println("1.USD");
    System.out.println("2.EUR");
    System.out.println("3.GBP");
    System.out.println("4.CAD");
    System.out.println("5.CNY");
    System.out.println("6.JPY");
    CurrencyNum = sc.nextByte();
    if (CurrencyNum==1|CurrencyNum==4) {

        CurrencySign= '$';
    }
    else {

        if (CurrencyNum==2){

            CurrencySign='€';
        }
        else {
            if (CurrencyNum==3){

                CurrencySign='£';
            }
            else {
                if (CurrencyNum==5|CurrencyNum==6){

                    CurrencySign='¥';
                }
            }
        }
    }
}
public static void MoneyAmount() {

    System.out.println("Please enter the amount of money you would like to transfer :");
    MoneyAmount = sc.nextDouble();
    if (MoneyAmount>499 & MoneyAmount<10000){
        CommissionRate=5;
        Commission="0.5%.";
    }
    else{
        if (MoneyAmount>10000){
            CommissionRate= 3;
            Commission="0.3%.";
        }
    }
    TotalCost = MoneyAmount + MoneyAmount * CommissionRate/1000;
    System.out.println("Please confirm the transfer. ( y/n ) ");
    System.out.println("A transfer of "+MoneyAmount+CurrencySign+".");
    System.out.println("Commission rate is "+Commission);
    System.out.println("You need to pay " + TotalCost+"." );
    sc.nextLine();
    Confirm = sc.nextLine();
    if (Confirm=="y"){
        System.out.println("A");
    }
    else if (Confirm=="n") {
        System.out.println("B");
    }
}
}

首先,程序不会等待用户确认/中止传输,而是打印“B”。然后,我读到this并添加了“sc.nextLine()”。然而,程序只是忽略最后一个 if 并且不打印任何内容。关于导致问题的原因以及如何解决它有什么想法吗?

p.s.:这是我运行程序时得到的结果:

Please choose your desired currnecy.
1.USD
2.EUR
3.GBP
4.CAD
5.CNY
6.JPY
2   // my input
Please enter the amount of money you would like to transfer :
120  // my input
Please confirm the transfer. ( y/n ) 
A transfer of 120.0€.
Commission rate is 1%.
You need to pay 121.2.
y  // my input

最佳答案

请尝试

if (Confirm.equals("y")){

else if (Confirm.equals("n"))

使用 == 比较对象引用而不是值。

关于java - 应用程序忽略 Scanner.nextLine() 方法之后的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17545689/

相关文章:

java - 如何在 Intellij 中轻松加载图像?

java - 监听HBase表更新

java - Hibernate Java - 在运行期间设置值并生成 SQL

java - 不使用数据库存储表数据的最佳方法?

java - 将字符串集合传递给 (String...values)

文件上传验证

java - 我正在学习 Java,以下程序只接受 0 的答案

ruby - 我如何在 ruby​​ 中解析这个字符串?

php - Strlen() 和非拉丁字符

arrays - scala中的输入数组