首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将测试器返回到要求用户输入欧元/英镑/cad的开头

如何将测试器返回到要求用户输入欧元/英镑/cad的开头
EN

Stack Overflow用户
提问于 2017-02-24 17:13:59
回答 2查看 38关注 0票数 1
代码语言:javascript
复制
import java.util.Scanner;
public class CurrencyTester
{ 
public static void main(String[]args)
{  

我想从一开始就循环,但不是要求用户输入相同的转换器,我怎么做呢?

代码语言:javascript
复制
    CurrencyConverter one= new CurrencyConverter();
    System.out.println("Convert dollar to euro/gbp/cad");

我想在第一个循环之后要求输入欧元英镑或cad。

代码语言:javascript
复制
    System.out.println("enter euro/gbp/cad");
    System.out.println("");
    Scanner input = new Scanner(System.in);
    String a = input.next();
    if("euro".equalsIgnoreCase(a))
    {

欧元

代码语言:javascript
复制
do { 

System.out.println("Enter Dollars:");
Scanner in = new Scanner(System.in);
String d = in.next();
if ("Q".equalsIgnoreCase(d)) {
    System.out.println("Stop!");
    break;
} else {
try {
        double ds = Double.parseDouble(d);
        one.setDollar(ds);
        System.out.println("Euro:");
        System.out.println("€"+one.getCurrencyE());
    } catch (NumberFormatException e) {
        System.out.println("Not double,wrong input");
    }
}
} while (true);

}
    if("gbp".equalsIgnoreCase(a))
    {

国内生产总值

代码语言:javascript
复制
do { System.out.println("Enter Dollars:");
Scanner in = new Scanner(System.in);
String d = in.next();
if ("Q".equalsIgnoreCase(d)) {
    System.out.println("Stop!");
    break;
} else {
    try {
        double ds = Double.parseDouble(d);
        one.setDollar(ds);
        System.out.println("GDP:");
        System.out.println("£"+one.getCurrencyG());
 } catch (NumberFormatException e) {
        System.out.println("Not double,wrong input");
 }
}
 } while (true);

}
    if("cad".equalsIgnoreCase(a))
    {

CAd

代码语言:javascript
复制
 do { System.out.println("Enter Dollars:");
Scanner in = new Scanner(System.in);
String d = in.next();
if ("Q".equalsIgnoreCase(d)) {
    System.out.println("Stop!");
    break;
} else {
try {
        double ds = Double.parseDouble(d);
        one.setDollar(ds);
        System.out.println("Canadian Dollar:");
        System.out.println("$"+one.getCurrencyC());
    } catch (NumberFormatException e) {
        System.out.println("Not double,wrong input");
    }
}
 } while (true);

 }
}
   }
  }

一开始我试着使用while循环,但它不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-24 17:59:53

现有代码的主要问题是复本在三个不同的地方具有相同的逻辑。相反,您要做的是将所有不同情况下常见的代码分组到方法中,或者以其他方式构造您的逻辑,这样您就不必重复它了。

下面是一种以更易读和更可维护的方式构造代码的方法:

代码语言:javascript
复制
public static void main(String[] args) {

    CurrencyConverter one = new CurrencyConverter();

    do{
        System.out.println("Convert dollar to euro/gbp/cad");

        System.out.println("enter euro/gbp/cad");
        System.out.println("");
        Scanner input = new Scanner(System.in);
        String a = input.next();

        String d = enterDollars();

        if( d == null )
            break;

        try {
            double ds = Double.parseDouble(d);
            one.setDollar(ds);

            if( "euro".equalsIgnoreCase(a) )
                System.out.println("Euro:\n€" + one.getCurrencyE());
            else if( "gbp".equalsIgnoreCase(a) )
                System.out.println("GBP:\n£" + one.getCurrencyG());
            else if( "cad".equalsIgnoreCase(a) )
                System.out.println("Canadian Dollar:\n$" + one.getCurrencyC());
        }
        catch (NumberFormatException e) {
            System.out.println("Not double,wrong input");
        }

    } while (true);

}


private static String enterDollars(){
    System.out.println("Enter Dollars:");
    Scanner in = new Scanner(System.in);
    String d = in.next();

    if ("Q".equalsIgnoreCase(d)) {
        System.out.println("Stop!");
        return null;
    } 

    return d;
}

我已经将用户输入的代码放入了它自己的单独方法中,这使得代码更容易阅读。类似地,您可以进一步将代码划分为更小的方法(如enterCurrency()presentResult()等),以提高主方法的可读性。

票数 1
EN

Stack Overflow用户

发布于 2017-02-24 17:47:26

您正在复制和粘贴类似的逻辑片段。这不是很好的实践,通常意味着您应该开始为类似的行为创建函数。我不知道您在编程中有多深入,所以我将向您展示一种简单的方法,通过使用一个do/while和另一个do同时获取有效的美元金额从用户那里获取输入。

把这个放进你的主

代码语言:javascript
复制
    CurrencyConverter one= new CurrencyConverter();
    Scanner input = new Scanner(System.in);
    System.out.println("Convert dollar to euro/gbp/cad");
    HashSet<String> conversions = new HashSet<>();
    conversions.add("euro"); 
    conversions.add("gdp"); 
    conversions.add("cad");

    System.out.println("");
    String userInput = "";
    do {
        System.out.println("enter euro/gbp/cad");
        userInput = input.nextLine();
        double amount = 0;
        //check to see if we need to get a dollar amount
        if(conversions.contains(userInput))
        {
            do {
                System.out.println("Enter Dollars:");
                String sAmount = input.nextLine();
                amount = Double.MAX_VALUE;
                //check it's a number before parsing
                if(sAmount.matches("\\d+"))
                {
                    amount = Double.parseDouble(sAmount);
                    //then set it for the object once
                    one.setDollar(amount);
                }
                else
                {
                    System.out.println("Error when parsing dollar amount: " + sAmount);
                    System.out.println("Please Try again!");
                }

            } while (amount != Double.MAX_VALUE);
        }
        //check for euro
        if(userInput.equals("euro"))
        {
            System.out.println("Euro: ");
            System.out.println("€"+one.getCurrencyE());
        }
        else if(userInput.equals("gdp"))
        {
            System.out.println("GDP: ");
            System.out.println("£"+one.getCurrencyG());
        }
        else if(userInput.equals("cad"))
        {
            System.out.println("Canadian Dollar: ");
            System.out.println("$"+one.getCurrencyC());
        }
        else if (!userInput.equals("quit"))
        {
            System.out.println("Error with input : " + userInput);
        }
    } while (!userInput.equals("quit"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42444526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档