美国州的输入名称 - 输出缩写。有没有更好的方法来写这个?

时间:2016-07-03 17:33:02

标签: java optimization

这是我在这里的第一篇文章。 我非常擅长编程,一周前开始学习java,但到目前为止它非常令人兴奋。

我想听听您对此代码的反馈。 基本上我希望它在输入名称后输出州名的缩写,反之亦然...

有没有更有效的方法来写这个? (高效至少机器处理代码的时间)

import java.util.Scanner;

class apples2{


    public static void main(String[] args){

        Scanner inputStateName = new Scanner(System.in);

        System.out.println("Input the state name or abbreviation: ");

        String stateName = inputStateName.nextLine();

        for(int counter = 0; counter <= statedata.states.length; counter++){

            if(stateName.equalsIgnoreCase(statedata.states[counter])){
                System.out.println("The abbreviation of your state is: " + statedata.statesAb[counter]);

                break;
            }

            if(stateName.equalsIgnoreCase(statedata.statesAb[counter])){
                System.out.println("You've entered an abbreviation, the state for that is: " + statedata.states[counter]);
                break;
            }
        }
    }
}

&#34; statedata.states&#34;是一个包含另一个类中所有州名的数组,&#34;声明数据.statesAb&#34;是一个缩写数组。

2 个答案:

答案 0 :(得分:2)

无论您使用枚举还是标准类,重要的一点是您不应该有两个长度相同的数组包含缩写和名称。你应该将你作为一个阶段处理的概念建模。

您的计划涉及各州。状态有缩写和名称,因此您应该有一个具有两个属性的类State:name和abbreviation。还有一个State个数组。

例如,如果您需要按名称对状态进行排序,这就变得至关重要。如何保持缩写数组的顺序与名称数组的顺序相同。这很难。但是如果名称和缩写在一个对象中保存在一起,按名称对单个对象数组进行排序,则会将缩写保留为名称。

所以,简而言之,Java是一种面向对象的语言,因此您应该定义自己的类来模拟您正在处理的功能域。

答案 1 :(得分:1)

有多种方法可以对解决方案进行建模。 Java Map非常适合,因为它允许您拥有键值对(即,您可以将状态缩写作为键和状态名称作为值)。它还允许您快速检查给定键是否存在,方法 containsKey(),或者如果Map中存在给定值,方法 conatinsValue()。这是一个可以用来推进学习的简单例子。

public class StateTest {
    public static void main(String... args)
    {
        Map<String, String> statesMap = new HashMap<>();
        statesMap.put("Ala", "Alabama");
        statesMap.put("Alaska", "Alaska");
        statesMap.put("Calif", "California");
        statesMap.put("Tex", "Texas");
        statesMap.put("Va", "Virginia");
        //... add more states here

        Scanner inputState = new Scanner(System.in);
        System.out.println("Input the state name or abbreviation: ");
        String state = inputState.nextLine();

        if(statesMap.containsKey(state)) 
        {
            System.out.println("You've entered an abbreviation, the state for that is: "+statesMap.get(state));
        } 
        else if(statesMap.containsValue(state))
        {
            for(Map.Entry<String, String> stateEntry : statesMap.entrySet())
            {
                if(state.equals(stateEntry.getValue()))
                    System.out.println("The abbreviation of your state is: " +stateEntry.getKey());
            }
        } else {
            System.out.println("No such state.");
        }
    }
}

有没有更有效的方式来写这个? (在机器处理代码的最短时间内效率很高)尝试以其他方式对解决方案进行建模,然后搜索给定状态并查看搜索是更快还是更慢。检查此link有关如何计算方法执行时间的方法。快乐学习。