Java获取输入数组的方法及小型电商作业模块化实现咨询
嘿,我来帮你搞定这两个问题!先从你问的Java获取输入数组的方法说起,再解决你作业里的文件读取和方法拆分需求~
Java中获取输入数组的常见方法
根据不同的输入场景,有几种常用的实现方式:
1. 使用Scanner类(最适合新手,操作简单)
如果需要先指定数组长度,再逐个输入元素,用Scanner最直观:
import java.util.Scanner; public class InputArrayWithScanner { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 先获取数组长度 System.out.print("请输入数组长度:"); int arrayLength = scanner.nextInt(); int[] userInputArray = new int[arrayLength]; // 逐个读取元素 System.out.println("请输入" + arrayLength + "个数组元素:"); for (int i = 0; i < arrayLength; i++) { userInputArray[i] = scanner.nextInt(); } scanner.close(); // 验证输入结果 System.out.println("你输入的数组是:"); for (int num : userInputArray) { System.out.print(num + " "); } } }
2. 使用BufferedReader(适合一次性输入多个元素,用空格分隔)
如果想让用户一次性输入所有元素(比如1 2 3 4),用BufferedReader处理字符串拆分更高效:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class InputArrayWithBufferedReader { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.print("请输入数组元素(用空格分隔):"); String inputLine = reader.readLine(); String[] stringElements = inputLine.split(" "); // 转换为int数组(如果是其他类型,比如double,换对应的parse方法即可) int[] intArray = new int[stringElements.length]; for (int i = 0; i < stringElements.length; i++) { intArray[i] = Integer.parseInt(stringElements[i]); } reader.close(); System.out.println("转换后的数组:" + Arrays.toString(intArray)); } }
作业:将商品与价格列表放入单独文件并通过独立方法调用
你的需求核心是数据与代码解耦,把商品数据放到外部文件,再用独立方法读取。我给你两种实现思路,一种是更符合面向对象的(推荐),另一种兼容你之前用的数组写法:
第一步:创建商品数据文件
先在项目目录下新建一个文本文件,比如命名为products.txt,每行存储一个商品的名称和价格,用逗号分隔(也可以用其他分隔符,只要代码里对应处理就行):
笔记本,29.99 钢笔,5.99 铅笔,1.49 马克笔,3.99 文件夹,8.99 便签本,4.49 涂改液,2.99 尺子,1.99 橡皮,0.99 订书机,12.99
第二步:编写独立的读取方法(推荐面向对象写法)
先定义一个Product类来封装商品的名称和价格,这样代码更清晰:
public class Product { private String name; private double price; public Product(String name, double price) { this.name = name; this.price = price; } // 提供getter方法供外部访问属性 public String getName() { return name; } public double getPrice() { return price; } }
然后写一个专门负责读取文件的工具类,里面放独立的读取方法:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ProductLoader { // 静态方法,直接通过类名调用,返回商品列表 public static List<Product> loadProductsFromFile(String filePath) throws IOException { List<Product> productList = new ArrayList<>(); BufferedReader reader = new BufferedReader(new FileReader(filePath)); String line; // 逐行读取文件内容 while ((line = reader.readLine()) != null) { // 拆分每行的名称和价格,注意去掉前后空格 String[] productParts = line.split(","); if (productParts.length == 2) { String productName = productParts[0].trim(); double productPrice = Double.parseDouble(productParts[1].trim()); productList.add(new Product(productName, productPrice)); } } reader.close(); return productList; } }
第三步:在你的商店主程序中调用这个方法
这样主程序就不需要硬编码商品数据了,直接从文件读取:
import java.io.IOException; import java.util.List; public class OnlineStore { public static void main(String[] args) { try { // 调用独立方法读取商品数据 List<Product> products = ProductLoader.loadProductsFromFile("products.txt"); // 打印商品列表(替换成你之前的展示逻辑) System.out.println("欢迎来到在线商店!商品列表:"); for (int i = 0; i < products.size(); i++) { Product p = products.get(i); System.out.println((i+1) + ". " + p.getName() + " - $" + p.getPrice()); } // 接下来就可以继续你之前的逻辑:获取用户输入、计算总价等 // ... } catch (IOException e) { // 处理文件读取异常,比如文件找不到、格式错误等 System.out.println("读取商品数据出错:" + e.getMessage()); } } }
兼容你之前的数组写法(如果不想用面向对象)
如果你还是想保持用两个数组存储名称和价格,可以调整读取方法返回包含两个数组的对象:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ProductArrayLoader { public static Object[] loadProductArrays(String filePath) throws IOException { List<String> nameList = new ArrayList<>(); List<Double> priceList = new ArrayList<>(); BufferedReader reader = new BufferedReader(new FileReader(filePath)); String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(","); if (parts.length == 2) { nameList.add(parts[0].trim()); priceList.add(Double.parseDouble(parts[1].trim())); } } reader.close(); // 转换为数组并返回 String[] nameArray = nameList.toArray(new String[0]); double[] priceArray = priceList.stream().mapToDouble(Double::doubleValue).toArray(); return new Object[]{nameArray, priceArray}; } }
然后在主程序中调用:
import java.io.IOException; public class OnlineStore { public static void main(String[] args) { try { Object[] productData = ProductArrayLoader.loadProductArrays("products.txt"); String[] productNames = (String[]) productData[0]; double[] productPrices = (double[]) productData[1]; // 这里就可以直接复用你之前的数组处理逻辑了 System.out.println("商品列表:"); for (int i = 0; i < productNames.length; i++) { System.out.println((i+1) + ". " + productNames[i] + " - $" + productPrices[i]); } // 你的用户输入处理、计算逻辑... // ... } catch (IOException e) { System.out.println("读取商品文件失败:" + e.getMessage()); } } }
几个注意点:
- 文件路径:如果用IDE运行,把
products.txt放在项目的根目录(和src文件夹同级);如果是命令行运行,确保文件在当前工作目录,或者用绝对路径(比如C:/projects/onlineStore/products.txt)。 - 异常处理:一定要捕获
IOException,避免因为文件找不到、格式错误导致程序直接崩溃。 - 数据格式:确保
products.txt里每行的格式都是名称,价格,不要有多余的空行或者错误的分隔符,否则读取时会出错。
内容的提问来源于stack exchange,提问作者Sandijs
相关产品推荐
相关产品推荐

