我正在尝试允许用户输入字符串,并且我的程序返回相应的数字。例如,如果用户键入“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));
}
}
答案 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)
嗯,除了你应该使用Map
和HashMap
代替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"
由于Integer
是不可变的,因此永远不需要使用相同的值创建多个Integer
。您可以使用Integer.valueOf(n)
明确获得具有该值的int
。它可能是新的,也可能是已经创建的。小int
始终会导致缓存值。
但是,你几乎不需要这样做。 Java具有 autoboxing ,其中Integer
在需要时转换为numbers.put(1, "one");
。声明
1
默默地将Integer.valueOf(1)
转换为{{1}}。