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
相关产品推荐
相关产品推荐

