我是Java的新手(以及一般的编程)。我正在开发一个个人项目,用户键入一个字符,将其转换为另一个字符。更具体地,用户将键入日语字符的罗马化,日语平假名等效项被输出到日语字符。我目前正在使用两个单独的课程:
Roma Hi RA core.Java
import java.util.*;
public class RomaHiraCore
{
public static void main(String[] args)
{
Table.initialize(); // Table.java needed!
Map<String, String> table = Table.getTable();
Scanner roma = new Scanner(System.in);
System.out.println("Romaji: ");
String romaji = roma.nextLine().toLowerCase();
if (table.containsKey(roma))
{
System.out.println(table.get(roma));
}
else
{
System.out.println("Please enter a valid character (e. g. a, ka)");
}
roma.close();
}
}
tables.Java
import java.util.*;
public class Table
{
private static Map<String, String> table = new LinkedHashMap<>();
public static Map<String, String> getTable()
{
return table;
}
public static void initialize()
{
// a - o
table.put("a", "あ");
table.put("i", "い");
table.put("u", "う");
table.put("e", "え");
table.put("o", "お");
// ka - ko
table.put("ka", "か");
table.put("ki", "き");
table.put("ku", "く");
table.put("ke", "け");
table.put("ko", "こ");
}
}
如果有人能指出我正确的方向,我将非常感激。我试图查看文档,但我似乎无法掌握它(也许我正在过度思考它)。当我运行程序时,它允许我输入一个字符;但是,它只会继续使用“else”语句,而不是扫描Table.java以查看输入是否与列出的任何值匹配。要么我忽略了某些东西,要么完全不同地使用完全不同的方法。
在main方法中,您当前正在存储用户输入的字符串值,但是您从未在其他任何地方访问该变量。
您编写了table.containsKey(roma)
但是roma是Scanner对象而不是他们输入的字符串,因此您应该使用table.containsKey(romaji)检查该字符串是否是有效密钥。
接下来,在你的else子句中,你要求他们重新输入一个输入但是从不给他们机会,因为你只是终止了扫描器。
你应该做的是更像这样的事情。
String romaji = roma.nextLine().toLowerCase();
while (true) {
if (table.containsKey(romaji)) {
System.out.println(table.get(romaji));
break;
}
else {
System.out.println("Enter a valid char:";
romaji = roma.nextLine().toLowerCase();
}
}
roma.close();
在地图中,您有String键,并且您提供的String位于romaji
变量中。所以你的if应该是这样的:if (table.containsKey(romaji))
。更重要的是,在这种情况下,我认为使用LinkedHashMap不会给你任何东西,简单的HashMap会像LinkedHashMap一样好(甚至更好),因为你不需要维护你的角色的插入顺序。