Java中如何根据输入标识实现数组指定位置字符串的赋值
问题解决:将字符串输入映射为数组下标完成赋值
需求梳理
接收输入的字符串标识(如"A"、"C"),对应预先定义的数组下标规则(A=0、B=1、C=2),将数组中A对应位置的元素赋值到C对应位置,最终输出数组第2位的内容(期望输出"value")。
原代码的问题
- 语法错误:
- 导入Scanner类时首字母需大写:
import java.util.Scanner; - Scanner实例化、变量定义需放在方法(如main)内部,static数组的声明位置需调整
- Java中字符串类型为
String(首字母大写),不是string - Scanner获取字符串的方法是
next(),不是nextStr() - 语句结尾缺少分号:
System.out.println(Example[2]);
- 导入Scanner类时首字母需大写:
- 逻辑缺陷:输入的是字符串"A""C",无法直接作为数组下标,需要建立字符串到数字下标的映射关系。
修正后的解决方案代码
这里用HashMap建立字符串到下标映射,写法灵活,便于后续扩展更多标识:
import java.util.HashMap; import java.util.Scanner; public class ArrayIndexMapping { // 预先定义目标数组 public static String[] Example = {"value", "", ""}; public static void main(String[] args) { // 建立字符串标识到数组下标的映射表 HashMap<String, Integer> indexMap = new HashMap<>(); indexMap.put("A", 0); indexMap.put("B", 1); indexMap.put("C", 2); Scanner sc = new Scanner(System.in); // 接收空格分隔的输入(如输入"A C") System.out.println("请输入两个标识,用空格分隔:"); String first = sc.next(); String second = sc.next(); // 通过映射表获取对应的数组下标 int fromIndex = indexMap.get(first); int toIndex = indexMap.get(second); // 执行赋值操作 Example[toIndex] = Example[fromIndex]; // 输出结果 System.out.println(Example[2]); sc.close(); } }
若输入为逗号分隔格式(如"A,C"),可调整输入处理部分:
// 替换原输入接收代码 System.out.println("请输入两个标识,用逗号分隔:"); String input = sc.next(); String[] parts = input.split(","); String first = parts[0].trim(); String second = parts[1].trim();
备选方案:switch-case转换
如果无需扩展更多标识,也可以用switch-case实现转换:
// 替换映射表和下标获取代码 int fromIndex = 0; switch(first) { case "A": fromIndex = 0; break; case "B": fromIndex = 1; break; case "C": fromIndex = 2; break; default: throw new IllegalArgumentException("无效标识:" + first); } int toIndex = 0; switch(second) { case "A": toIndex = 0; break; case "B": toIndex = 1; break; case "C": toIndex = 2; break; default: throw new IllegalArgumentException("无效标识:" + second); }
内容的提问来源于stack exchange,提问作者Muhammed Temur
相关产品推荐
相关产品推荐

