无法从二维String数组选取随机元素,报错String[]无法转换为int
问题解决方案
核心问题修复
- 返回类型不匹配:
chooseState方法声明返回int,但实际返回的是String[](二维数组的一行),直接修改方法返回类型为String[]即可。 - 随机元素选取逻辑:
Math.random()完全可以用来生成数组的随机索引,通过(int)(Math.random() * 数组长度)得到0到数组长度-1的整数索引,用这个索引就能取出对应位置的元素。另外方法参数里已经传入了Random对象,用它的nextInt方法会更简洁规范。
修正后的代码
// multidimensional array public static final String[][] arrCapitals = { { "Alabama", "Montgomery" }, { "Alaska", "Juneau" }, { "Arizona", "Phoenix" }, { "Arkansas", "Little Rock" }, { "California", "Sacramento" }, { "Colorado", "Denver" }, { "Connecticut", "Hartford" }, { "Delaware", "Dover" }, { "Florida", "Tallahassee" }, { "Georgia", "Atlanta" }, { "Hawaii", "Honolulu" }, { "Idaho", "Boise" }, { "Illinois", "Springfield" }, { "Indiana", "Indianapolis" }, { "Iowa", "Des Moines" }, { "Kansas", "Topeka" }, { "Kentucky", "Frankfort" }, { "Louisiana", "Baton Rouge" }, { "Maine", "Augusta" }, { "Maryland", "Annapolis" }, { "Massachusettes", "Boston" }, { "Michigan", "Lansing" }, { "Minnesota", "Saint Paul" }, { "Mississippi", "Jackson" }, { "Missouri", "Jefferson City" }, { "Montana", "Helena" }, { "Nebraska", "Lincoln" }, { "Nevada", "Carson City" }, { "New Hampshire", "Concord" }, { "New Jersey", "Trenton" }, { "New York", "Albany" }, { "New Mexico", "Santa Fe" }, { "North Carolina", "Raleigh" }, { "North Dakota", "Bismarck" }, { "Ohio", "Columbus" }, { "Oklahoma", "Oklahoma City" }, { "Oregon", "Salem" }, { "Pennsylvania", "Harrisburg" }, { "Rhode Island", "Providence" }, { "South Carolina", "Columbia" }, { "South Dakota", "Pierre" }, { "Tennessee", "Nashville" }, { "Texas", "Austin" }, { "Utah", "Salt Lake City" }, { "Vermont", "Montpelier" }, { "Virginia", "Richmond" }, { "Washington", "Olympia" }, { "West Virginia", "Charleston" }, { "Wisconsin", "Madison" }, { "Wyoming", "Cheyenne" } }; // 修改返回类型为String[],并使用传入的Random对象生成随机索引 public static String[] chooseState(Random rand, String[][] arrCapitals) { // 生成0到arrCapitals.length-1之间的随机整数索引 int randomIndex = rand.nextInt(arrCapitals.length); // 返回对应索引的州和首府数组 return arrCapitals[randomIndex]; }
补充说明
- 如果仍想使用
Math.random(),可以把生成索引的代码改成:int randomIndex = (int)(Math.random() * arrCapitals.length); - 调用这个方法时,需要先实例化
Random对象,比如:Random rand = new Random(); String[] randomStateCapital = chooseState(rand, arrCapitals); System.out.println("随机州:" + randomStateCapital[0] + ",首府:" + randomStateCapital[1]);
内容的提问来源于stack exchange,提问作者Ryan Hansen
相关产品推荐
相关产品推荐

