0

我试图让用户输入字符串并让我的程序返回相应的数字。例如,如果用户键入“one”,则程序返回“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));
    }
}
4

2 回答 2

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");

然后你就可以得到带有“一”字样的号码

numbers.get(1) //it will return "one"
于 2013-10-04T01:43:28.547 回答
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并且Vector陈旧过时。这些类的每个方法都是synchronized,因此它们比HashMap和 慢ArrayList。没有人再使用这些了,所以你不应该。

为什么不是主线?

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

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

由于Integers 是不可变的,因此永远不需要制作多个具有相同值的值。您可以Integer使用Integer.valueOf(n). 它可能是新的,也可能是已经创建的。小ints 总是导致缓存值。

但是,您几乎不需要这样做。Java 具有自动装箱功能,其中ints 会根据需要转换为Integers。该声明

numbers.put(1, "one");

默默地转换1Integer.valueOf(1).

于 2013-10-04T02:11:36.237 回答