如何使我的程序(将数字转换为文本表示)工作?

时间:2013-10-04 01:35:11

标签: java hashtable

我正在尝试允许用户输入字符串,并且我的程序返回相应的数字。例如,如果用户键入“1”,则程序返回“1”,依此类推。我正在附上我迄今为止所建造的东西,但是我被困住了,我在工作后已经在这两天了 - 任何建议都非常感谢!我知道最后一行不正确,但我希望我能朝着正确的方向努力。

import java.util.Hashtable;
import java.util.Scanner;

class HTDemo {

    public static void main(String args[]) {

        // creates a Hashtable <key, value>
        Hashtable<String, Integer> numbers = new Hashtable<String, Integer>();

        // adds values to the Hashtable
        numbers.put("one", new Integer(1));
        numbers.put("two", new Integer(2));
        numbers.put("three", new Integer(3));
        numbers.put("four", new Integer(4));
        numbers.put("five", new Integer(5));
        numbers.put("six", new Integer(6));
        numbers.put("seven", new Integer(7));
        numbers.put("eight", new Integer(8));
        numbers.put("nine", new Integer(9));
        numbers.put("ten", new Integer(10));

        Scanner sc = new Scanner(System.in);
        System.out.print("Input a string value 'one' through 'ten': ");
        String line = sc.nextLine();
        System.out.println("You entered: " + line + numbers.containsKey(object));
    }
}

2 个答案:

答案 0 :(得分:0)

嗯,这几乎就是Java API本身的例子: http://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html

您可以通过致电:

来获取“一号”号码
numbers.get("one") //it will return 1

如果你想以另一种方式拥有它,你必须建立它:

Hashtable<Integer, String> numbers = new Hashtable<Integer, String>();
numbers.put(new Integer(1), "one");

然后您将能够获得带有“one”文本的数字

numbers.get(1) //it will return "one"

答案 1 :(得分:0)

嗯,除了你应该使用MapHashMap代替Hashtable的标准观察,你不应该在main中做所有事情,而你不应该需要或想要使用new Integer,你已经改变了地图的方向。根据问题陈述,当用户键入1时,您希望程序打印出one。所以,你需要像:

private Map<Integer, String> numbers;
private final Map<Integer, String> initializeNumberMap() {
    numbers = new HashMap<>();
    numbers.put(1, "one");
    ...
    numbers.put(10, "ten");
    return numbers;
}

HTDemo类的构造函数中调用它,并让main创建一个实例。

public static void main(String[] args) {
    new HTDemo().run();
}
public HTDemo() {
    initializeNumberMap();
}
public void run() {
    Scanner sc = new Scanner(System.in);
    System.out.print("Input a number between 1 and 10 inclusively.");
    int number = sc.nextInt();
    if (number >= 1 && number <= 10) {
        System.out.println("You entered " + numbers.get(number);
    } else {
        System.out.println("I don't understand " + number + " yet.");
    }
}

现在,您的研究项目将是处理所有整数,因此-5会导致"minus five"。请注意,除英语之外的其他语言在数字名称和案例中存在重大差异。另外,如果您想做的不仅仅是编写命令行应用程序;如果您想为其他问题编写实用程序,您将需要查看缓存和并发。但那是另一天。

为什么不使用Hashtable?

HashtableVector陈旧且过时。这些类的每种方法都是synchronized,因此它们比HashMapArrayList慢。没有人再使用这些,所以你不应该这样做。

为什么不主?

如果您在main中执行所有操作,则无法测试您的工作。假设你想做那个研究项目而你想测试你的代码。您可能会提取方法String convertToString(int number)。然后你可以编写JUnit测试来检查convertToString(17) == "seventeen"

为什么不是新的整数(n)?

由于Integer是不可变的,因此永远不需要使用相同的值创建多个Integer。您可以使用Integer.valueOf(n)明确获得具有该值的int。它可能是新的,也可能是已经创建的。小int始终会导致缓存值。

但是,你几乎不需要这样做。 Java具有 autoboxing ,其中Integer在需要时转换为numbers.put(1, "one"); 。声明

1

默默地将Integer.valueOf(1)转换为{{1}}。