You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:43:44