如何改善我的货币兑换计划?

时间:2010-11-09 21:51:49

标签: java

我正在编写一个Java货币兑换计划,我在其中为用户编制3种外币,以便从美元兑换成外币。当用户输入“000”

时,我想要突破while
import java.lang.StringBuffer;
import java.io.IOException;

class Project6_5
{
    public static void main(String args[])
    {
        int usa, amount, stop;
        System.out.println("This is a Currencies Exchange program");
        System.out.println("From US Dollar to Foreign Currency");        //Explaining to user
        stop = 0;
        while(true/*stop!=999*/)
        {
            try
            {
                System.out.print("What is your amount of US dollars?");
                System.out.println("                        000 to end Program");
                usa = Integer.parseInt(GCS());
                System.out.println("What currency would you prefer?");
                System.out.println("Avaliable currencies are:");
                System.out.println("1 for Japanese Yen, 2 for Taiwanese Dollar, 3 for Euro");
                amount = Integer.parseInt(GCS());
                if( amount == 1 )
                {
                    System.out.println("Exchange rate");
                    System.out.println("80.75 Yen for 1 Dollar");
                    System.out.println(" ");
                    System.out.println("Your Yen is "+ usa*80.75);
                    System.out.println("________________________________________");
                }
                if( amount == 2 )
                {
                    System.out.println("Exchange rate");
                    System.out.println("30.125 NTD for 1 Dollar");
                    System.out.println(" ");
                    System.out.println("Your NTD is "+ usa*30.125);
                    System.out.println("________________________________________");
                }
                if( amount == 3 )
                {
                    System.out.println("Exchange rate");
                    System.out.println("1.4201 Euro for 1 Dollar");
                    System.out.println(" ");
                    System.out.println("Your Euro is "+ usa*1.4201);
                    System.out.println("________________________________________");
                }
                if(usa==000)
                {
                    System.out.println("End Program");
                    return;
                }       
            }
            catch(NumberFormatException NFE)  //catch if integer's not number
            {
                System.err.println("ERROR");
                System.err.println("Type in Integer only");
            }
            catch(Exception E)  //catch Genaral Error
            {
                System.err.println("ERROR");
            }
        }
    }//end of Main
    public static String GCS()  //GetConsoleString  User-Input
    {
        int noMoreInput = -1;
        char enterKeyHit = '\n';
        int InputChar;
        StringBuffer InputBuffer = new StringBuffer(100);

        try
        {
            InputChar = System.in.read();
            while(InputChar != noMoreInput)
            {
                if((char)InputChar != enterKeyHit)
                {
                    InputBuffer.append((char) InputChar);
                }
                else
                {
                    InputBuffer.setLength(InputBuffer.length()-1);
                    break;
                }
                InputChar = System.in.read();
            }
        }//close Try(21)
        catch(IOException IOX)
        {
            System.err.println(IOX);
        }
        return InputBuffer.toString();
    }//end of GCS
}

2 个答案:

答案 0 :(得分:1)

每当你看到自己编写相同的代码块时,差异很小,你应该将该块重构为一个方法。

从你的代码:

if( amount == 1 ) 
{ 
    System.out.println("Exchange rate"); 
    System.out.println("80.75 Yen for 1 Dollar"); 
    System.out.println(" "); 
    System.out.println("Your Yen is "+ usa*80.75); 
    System.out.println("________________________________________"); 
} 
if( amount == 2 ) 
{ 
    //all the same as above except for 30.125 instead of 80.75
    //and NTD instead of Yen 
} 
//...

该方法应该接受更改的值,然后重复您的语句,输出变量而不是硬编码的数字和货币类型。

请注意,您的程序目前不符合您的规范,因为您在检查之前将用户的输入解析为Integer,因此用户输入的任何字符串Integer.parseInt评估为0 (而不仅仅是“000”)将导致您的程序返回。

答案 1 :(得分:1)

移动这段代码:

            if(usa==000) 
            { 
                System.out.println("End Program"); 
                return; 
            }        

到下面:

            usa = Integer.parseInt(GCS());  

因为您想要检查用户是否在返回后直接输入了000

我建议将return替换为:

            System.exit(0);

这显示了您退出程序的明确意图,这是正常终止。