Java中使用Scanner类读取控制台输入时遇到问题
处理Java Scanner读取顶点输入的问题
嘿,我瞅见你这段用Java Scanner处理顶点输入的代码啦,最后一行的keySet.keySe...明显是没写完,应该是调用keySet()方法对吧?我帮你把代码补全,顺便梳理下逻辑和容易踩的小坑:
首先,先把你未完成的代码补全并优化下:
import java.util.HashMap; import java.util.Scanner; import java.util.Set; public class VertexInputExample { public static void main(String[] args) { System.out.println("Please enter the number of vertices"); Scanner scanner = new Scanner(System.in); int numOfVertices = scanner.nextInt(); // 处理nextInt留下的换行符(好习惯,避免后续用nextLine时出问题) scanner.nextLine(); System.out.println("Please name the vertices (space-separated or each on a new line)"); HashMap<String, Integer> nameNumMap = new HashMap<>(); for (int i = 0; i < numOfVertices; ) { String vertexName = scanner.next().trim(); // 避免重复的顶点名称覆盖原有映射 if (nameNumMap.containsKey(vertexName)) { System.out.println("Oops, '" + vertexName + "' is already used! Please enter a unique name."); } else { nameNumMap.put(vertexName, i); i++; } } // 你未完成的部分:正确获取keySet的写法 Set<String> keySet = nameNumMap.keySet(); System.out.println("\nHere's your vertex name to index mapping:"); for (String vertex : keySet) { System.out.println(vertex + " -> " + nameNumMap.get(vertex)); } // 记得关闭Scanner scanner.close(); } }
几个关键注意点:
- 换行符处理:
scanner.nextInt()只会读取整数,输入完回车的换行符会留在输入缓冲区里。虽然scanner.next()会自动跳过空白(包括换行),但如果后续需要用scanner.nextLine()读取整行内容,就会直接读到空字符串,所以提前用scanner.nextLine()清掉换行符是个好习惯。 - 重复顶点名称:HashMap的key是唯一的,如果用户输入重复的名称,后面的会直接覆盖前面的映射。我加了判断逻辑,提示用户输入唯一名称,避免数据丢失。
- keySet调用:你之前的
keySet.keySe...应该是笔误,正确的方法调用是nameNumMap.keySet(),它会返回所有顶点名称的集合,方便后续遍历或操作。
如果还有其他问题,比如输入验证(比如用户输入非整数的顶点数量),可以再唠唠~
内容的提问来源于stack exchange,提问作者Auro
相关产品推荐
相关产品推荐

