当前位置: 首页 > 知识库问答 >
问题:

不确定如何正确关闭输入

燕英奕
2023-03-14

我有一些代码,其中多个方法使用键盘,并在主方法中连续调用。我正在做的练习特别要求使用4种不同的方法,所以我不能把它们放在一起。最初,我用键盘。在每个方法的末尾关闭(),但当第二个方法运行时,无论调用顺序如何,这都会导致NoTouchElementException。通过卸下键盘。close(),代码现在可以工作了,但是我现在收到了资源泄漏的警告,因为键盘没有关闭。有人能告诉我一种关闭输入而不出错的方法吗?任何帮助都将不胜感激。

import java.util.*;

public class CurrencyConverter {
    static double money;
    static double xr;
    
    //Running 
    public static void main(String[] args) 
    {
        
        requestAmount();
        requestRate();
        displayResult();
        
    }
    
    //Retrieving amount of money to be exchanged based on user input
    public static void requestAmount()
    {
        System.out.println("Please enter quanitity of money to be exchanged:");
        Scanner keyboard = new Scanner(System.in);
        money = keyboard.nextDouble();  
    }
    
    //Retrieving exchange rate from user input
    public static void requestRate() 
    {
        System.out.println("Please enter exchange rate:");
        Scanner keyboard = new Scanner(System.in);
        xr = keyboard.nextDouble();     
    }
    
    //Converting currency
    public static double conversionCalculator(double moneyIn, double xrIn) 
    {
        return moneyIn*xrIn;
    }
    
    //Display amount of converted currency
    public static void displayResult() 
    {
        System.out.println("Amount of currency post-conversion = " + conversionCalculator(money, xr));
    }
    
    
}

/*
Design and implement a program that converts a sum of money to a different
currency. The amount of money to be converted, and the exchange rate, are
entered by the user. The program should have separate methods for:
• obtaining the sum of money from the user;
• obtaining the exchange rate from the user;
• making the conversion;
• displaying the result.
*/

共有1个答案

齐锐进
2023-03-14

您不需要关闭包裹系统的扫描仪。正如大卫·康拉德在评论中指出的那样。通常,您应该有一个与系统相关联的扫描仪。在里面在您的位置上,我将在main方法中创建它,并将其作为参数传递到方法中。

如果您确实不想显示此警告,可以在扫描仪顶部添加@SuppressWarnings(“资源”)

 //Running 
public static void main(String[] args) 
{
    @SuppressWarnings("resource")
    Scanner keyboard = new Scanner(System.in);
    requestAmount(keyboard);
    requestRate(keyboard);
    displayResult();
    
}
 类似资料:
  • 问题内容: 我有全部传播异常的方法,然后在一个地方处理,但是我意识到了一些事情。 假设我有这样的方法 我的问题是,如果doSometing()方法引发异常,该语句将不会关闭,但我不想在那里处理异常。尝试并捕获只会抛出异常并最终关闭语句的正确方法吗? 问题答案:

  • 问题内容: 在清理一些代码时,FindBugs向我介绍了一些使用Connection,CallableStatement和ResultSet对象的JDBC代码。这是该代码的一个片段: FindBugs指出这些应该在finally块内。我开始重构我的代码来做到这一点,我开始想知道如何在finally块中处理代码。 Connection对象的CallableStatement的创建可能会引发异常,而我

  • 问题内容: 其中哪一个是正确的? 问题答案: 工作正常,并正确关闭标签。最好为视障人士添加属性。

  • 问题内容: 如何正确关闭IPython Notebook? 目前,我只是关闭浏览器选项卡,然后在终端中使用。 不幸的是,滴答也无济于事(它们确实杀死了它们的内核,但没有退出iPython)。 问题答案: 当前没有比终端中的Ctrl + C更好的方法了。 我们正在考虑如何进行显式关机,但是笔记本作为单用户应用程序(用户可以自由停止它)和作为多用户服务器(只能由管理员操作)之间存在一些紧张关系。阻止它

  • 我有一个简单的java,它运行一些任务对象(实现)。 除了尽最大努力尝试停止处理正在执行的任务之外,没有任何保证。例如,典型的实现将通过{@link thread#interrupt}取消,因此任何未能响应中断的任务都可能永远不会终止。 我的问题是,有没有办法确保那些(任务)线程会终止?我想出的最佳解决方案是在程序末尾调用,但这显然是愚蠢的。

  • 我错过了什么关于正确关闭生产者和消费者的事情吗?