Java代码语法错误求助:index.hasNext与input.nextInt()报错问题
问题分析与解决方案
先帮你拆解下遇到的两个核心问题,再给出修正后的完整代码:
1. index.hasNext() 的语法错误
index 是一个普通的 int 变量,它根本没有 hasNext() 方法——这个方法是属于你创建的 Scanner 对象 input 的,所以循环条件应该改成 input.hasNext()(更严谨的话可以用 input.hasNextInt() 先判断是否有整数类型的权重数据,再继续读取)。
2. types[index] = input.nextInt() 的类型不匹配错误
types 是 String[] 类型的数组,而 input.nextInt() 返回的是整数类型,两者类型完全不兼容,肯定会报错。你需要用 Scanner 的字符串读取方法,比如 input.next()(读取到下一个分隔符)或者 input.nextLine()(读取整行)。另外注意你的数据是CSV格式,默认Scanner用空格作为分隔符,所以最好先设置分隔符为逗号:input.useDelimiter(",");,这样才能正确拆分CSV里的每一列数据。
修正后的完整代码
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class Horse { public static void main(String[] args) { Scanner input = null; int[] weights = new int[100]; String[] types = new String[100]; try { input = new Scanner(new File("horseData.csv")); // 设置CSV分隔符为逗号,适配文件格式 input.useDelimiter(","); } catch (FileNotFoundException e) { System.out.println("Error: File Not Found"); e.printStackTrace(); System.exit(1); } int index = 0; // 循环条件改为input的判断方法,同时确保有足够的权重和类型数据 while (input.hasNextInt() && input.hasNext()) { weights[index] = input.nextInt(); // 读取字符串类型的马种信息,trim()去掉可能的多余空格 types[index] = input.next().trim(); System.out.println(" Weight: "+ weights[index] + ", types:" + types[index]); index++; // 别忘了自增索引,否则会一直覆盖同一个数组位置 } input.close(); // 只遍历实际读取到的数据,而不是整个数组长度,避免输出空值 for(int i = 0; i < index; i++) { System.out.println((i+1) + "\t" + amountOfFeed(types[i], weights[i])); } } public static double amountOfFeed(String horseType, int horseWeight) { // 先统一去除字符串前后空格,避免原数据的空格导致匹配失败 String trimmedType = horseType.trim(); if(trimmedType.equals("maintance") || trimmedType.equals("light work")) { return horseWeight * .02; } else if (trimmedType.equals("Moderate work")) { return horseWeight * .025; } return horseWeight * .03; } }
额外优化说明
- 原代码里循环没有自增
index,会导致每次都覆盖数组的第一个元素,所以加上index++是必须的。 - 遍历数组时,改成只遍历到实际读取的
index位置,避免输出大量未赋值的空字符串或默认0值。 - 判断马种时用
trim()处理字符串,能避免原数据里的前后空格导致匹配失败的问题。
内容的提问来源于stack exchange,提问作者Misterrmrr
相关产品推荐
相关产品推荐

