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

Java作业疑问:输入数量未知时如何用固定长度数组存用户输入?

嘿,我完全懂你的纠结——固定长度数组和未知输入数量看起来简直是天生的矛盾,但其实咱们有两种简单的办法能搞定这个作业要求!

解决方案:两种适配固定长度数组的输入方式

首先咱们得明确:作业要求用固定长度数组,并不意味着必须在一开始就精准知道输入数量,只要数组长度是固定的就行。下面给你两个实用的示例:

方法1:先让用户指定商品总数(最严谨的方式)

这种方式最直接,先让用户告诉我们要输入多少个商品,然后创建对应长度的数组,完美匹配固定长度的要求,逻辑也简单。

首先定义一个Product类来存储商品信息(让代码更清晰):

class Product {
    private String name;
    private int qty;
    private double cost;

    public Product(String name, int qty, double cost) {
        this.name = name;
        this.qty = qty;
        this.cost = cost;
    }

    // 重写toString方便打印输出
    @Override
    public String toString() {
        return "商品名称:" + name + ",数量:" + qty + ",单价:" + cost;
    }
}

然后是主程序代码:

import java.util.Scanner;

public class ProductInput {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 先获取用户要输入的商品总数
        System.out.print("请输入你要添加的商品数量:");
        int totalProducts = scanner.nextInt();
        scanner.nextLine(); // 读取掉输入完数字后的换行符,避免影响后续输入

        // 根据用户指定的数量创建固定长度数组
        Product[] products = new Product[totalProducts];

        // 循环输入每个商品的信息
        for (int i = 0; i < totalProducts; i++) {
            System.out.print("请输入第" + (i + 1) + "个商品(格式:名称 数量 单价):");
            String[] inputParts = scanner.nextLine().split(" ");

            try {
                // 解析输入内容并存入数组
                String productName = inputParts[0];
                int qty = Integer.parseInt(inputParts[1]);
                double cost = Double.parseDouble(inputParts[2]);
                products[i] = new Product(productName, qty, cost);
            } catch (Exception e) {
                System.out.println("输入格式有误,请重新输入这个商品!");
                i--; // 回退循环索引,重新处理当前商品输入
            }
        }

        // 打印所有输入的商品信息
        System.out.println("\n你输入的所有商品信息:");
        for (Product product : products) {
            System.out.println(product);
        }

        scanner.close();
    }
}

方法2:用“足够大的固定数组+计数器”处理未知输入数量

如果不想让用户提前输入总数,咱们可以创建一个足够大的固定长度数组(比如设为100,一般用户不会输入这么多商品),再用一个计数器记录实际输入的商品数量,最后只处理数组中有效的元素。

主程序代码(依然使用上面的Product类):

import java.util.Scanner;

public class ProductInputUnlimited {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 设定一个足够大的固定数组长度,应付绝大多数场景
        final int MAX_PRODUCT_LIMIT = 100;
        Product[] products = new Product[MAX_PRODUCT_LIMIT];
        int actualCount = 0; // 记录实际输入的商品数量

        System.out.println("请输入商品信息(格式:名称 数量 单价),输入\"end\"即可结束输入:");
        
        // 循环输入直到数组满或者用户输入终止指令
        while (actualCount < MAX_PRODUCT_LIMIT) {
            System.out.print("请输入第" + (actualCount + 1) + "个商品:");
            String input = scanner.nextLine().trim();

            // 检查用户是否要终止输入
            if (input.equalsIgnoreCase("end")) {
                break;
            }

            String[] inputParts = input.split(" ");
            if (inputParts.length != 3) {
                System.out.println("输入格式错误!请按照「名称 数量 单价」的格式输入。");
                continue;
            }

            try {
                String productName = inputParts[0];
                int qty = Integer.parseInt(inputParts[1]);
                double cost = Double.parseDouble(inputParts[2]);
                
                // 将商品存入数组,计数器加1
                products[actualCount] = new Product(productName, qty, cost);
                actualCount++;
            } catch (NumberFormatException e) {
                System.out.println("数量或单价必须是数字,请重新输入!");
            }
        }

        // 打印所有有效的商品信息
        System.out.println("\n你输入的有效商品信息:");
        for (int i = 0; i < actualCount; i++) {
            System.out.println(products[i]);
        }

        scanner.close();
    }
}

两种方法的对比

  • 方法1更贴合固定长度数组的设计逻辑,没有空间浪费,适合作业要求的严谨性;
  • 方法2更灵活,不用用户提前输入数量,适合用户体验更好的场景,只要数组长度设得足够大就没问题。

你可以根据作业的具体要求或者自己的偏好选择其中一种,两种都完全符合“用固定长度数组存储任意数量输入”的要求哦!

内容的提问来源于stack exchange,提问作者ExcelPygmy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:45:57