Java 货币兑换商

Java 货币兑换商,java,Java,我试图写一个代码,将在AED,MYR,USD之间交换。我得到了以下代码,我无法修复错误 看起来system.in没有关闭,因此我编写了inclose()。但我还是得到了同样的结果 我的问题可能是别的,我看不到 编辑:这是带有更改的当前代码 import java.util.Scanner; public class CurrencyConverter { protected static long amount; static long Namount ; sta

我试图写一个代码,将在AED,MYR,USD之间交换。我得到了以下代码,我无法修复错误

看起来system.in没有关闭,因此我编写了
inclose()
。但我还是得到了同样的结果

我的问题可能是别的,我看不到

编辑:这是带有更改的当前代码

import java.util.Scanner;

public class CurrencyConverter
{
     protected static long amount;
     static long Namount ;
     static int commesion;

     static String to;

    public static void main( String[] args )
    {
    CurrencyConverterM MSg=new CurrencyConverterM();
    CurrencyConverterM account1 = new CurrencyConverterM( );
     String from ;
    for(int i=0 ;i<3; i++)
     {
        System.out.println("Please enter your currency (USD, AED, or MYR only): ");
        Scanner in = new Scanner( System.in );
        from = in.nextLine();
        System.out.println("What currency do you want?: ");
        String to = in.nextLine();
        System.out.println("How much you want to convert?: ");
        amount= in.nextLong();
                //in.close();

    if ("USD".equals(from)) {
        amount=((long) (amount*0.27));
        amount=account1.converter(to, amount);
    }
    else if ("MYR".equals(from)) {
        amount=((long) (amount * 1.14));
        amount =account1.converter(to, amount);
    }
    else {
        if(mmount >= 900) {
            Namount = (amount-50);
            commesion =50;

        }
        else 
        {
            Namount = (amount - 10);
            commesion = 10;
        }
    }
        System.out.println(MSg.getMsg());

}

    }
}

以前它不读取用户的输入,现在它不转换值。 我试图在每次计算后打印出我的数值,但看起来变量am的计算不正确,它被乘以0或除以1(最后的结果总是0),但主类中的量不是0,也没有转换为AED


所以我明白了:谢谢你。转换后的金额为0.0 1000.0。我们将收取50%佣金,您将获得0.0

您应该调用
scanner.nextLine()(in.nextLine())
而不是
in.toString()

您也可以使用相同的扫描仪,而不是创建3个不同的扫描仪

请参阅使用一个扫描仪更新的代码的以下部分(中):

通过在.nextLine()中执行操作,可以读取下一行用户输入

来自java 8 javadocs:

下一行

公共字符串nextLine()

使扫描器前进超过当前行并返回 被跳过了。此方法返回当前行的其余部分, 不包括末端的任何行分隔符。该位置设置为 下一行的开头

由于此方法继续在输入中搜索 行分隔符,它可以缓冲搜索该行的所有输入 如果没有行分隔符,则跳过

以上内容将解决代码不读取任何输入的问题

稍后,您将在比较用户输入的字符串时遇到问题:

from==“USD”
应更改为
“USD”。等于(from)


提示:当变量为空时,最好使用“String”.equals(变量)来避免空指针异常。

字符串比较是错误的


from==“MYR”
应该是
from.equals(“MYR”)
而我建议
equalsIgnoreCase
不区分大小写。

您无法修复哪个错误?这里有一个主要问题:from==“MYR”您无法比较像这样的对象的值,您需要使用equals方法不要一直创建
扫描仪
s并将其用于一个输入,然后关闭它们。在
main
的开头附近创建一个
Scanner
对象,每次需要输入时都使用它,并且只在
main
的末尾关闭它(或者根本不关闭它)。欢迎使用堆栈溢出!请阅读“如何创建一个应用程序”。然后使用链接改进您的问题(不要通过评论添加更多信息)。否则,我们无法回答您的问题并为您提供帮助。请注意:修复代码中的一个错误(错误的字符串比较)是非常糟糕的,但仍然无法告诉我们您仍然认为代码错误的内容。对此,我深表歉意,我现在就编辑它。并将很快编辑帖子,使其具有最小可复制示例的属性。实际上,通过调用next,您可以读取下一个标记。你是说nextLine()?谢谢你@Stultuske。答案已更新。next()也可以使用,但是它会在空白(标记)之间进行迭代。在任何情况下,正确的实现都应该包括对正确输入的检查和验证。是的,thanx不知道“字符串”。equals(变量)我建议在字符串上调用equals。我的评论不是equals vs equalsIgnoreCase,而是from.equals(“MYR”)vs“MYR”。equals(from)。它只是遵循最佳实践,可能在某些情况下避免NPE,这确实有帮助,但现在我陷入了另一个问题。。。由于某些原因,它不会显示正确的转换金额。@ZakariaAbouShaer注意:这不是免费调试。A) 首先试着自己调试代码,只有当这不起作用的时候,然后B)写一个清楚的问题,清楚地指出你当前的问题。我知道这不是一个免费的调试网站,我是一名学生,正在尝试以面向对象的方式学习java,我自己试过调试,但没有做好。
     public class CurrencyConverterM extends CurrencyConverter
     {
        long am;
     @SuppressWarnings("static-access")
   long converter (String to,long amount)
   {

    if ("MYR".equals(to)) {
        am=(super.amount*=0.88);

    }
    else if ("MYR".equals(to)) {
        am=(super.amount*=3.7);

    }
    return am ;
}



@SuppressWarnings("static-access")
public  String getMsg()
{
    return ("Thank you. The converted amount is "+(super.amount) + ". We will take" +super.commesion + " commission, and you will get "+ super.Namount);
}
    System.out.println("Please enter your currency (USD, AED, or MYR only): ");
    Scanner in = new Scanner( System.in );
    from = in.nextLine();
    System.out.println("What currency do you want?: ");
    String to = in.nextLine();
    System.out.println("How much you want to convert?: ");
    amount= in.nextLong();
    System.out.println(from + " " + to);
    in.close();