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

同一Java文件内如何将已打印的输出作为后续代码的输入

实现方案

方案1:直接复用已生成的随机数组(推荐)

你前面执行完洗牌逻辑后,numbers数组已经存储了完整的0~n-1随机排列结果,完全不需要走输入流中转,直接遍历数组做统计即可,改动量最小、运行效率最高:

public class Bonus1{
    public static void main(String[] args) {
        int n = Integer.parseInt(args[0]);
        int[] numbers = new int[n];
        for (int i = 0; i < n; i++ ) {
            numbers[i] = i;
        }
        // 洗牌算法生成随机排列
        for (int i = 0; i < n; i++ ) {
            int r = i + (int)(Math.random() * (n - i));
            int tmp = numbers[i];
            numbers[i] = numbers[r];
            numbers[r] = tmp;
            System.out.print(numbers[i] + " "); // 加空格分隔方便查看排列
        }
        System.out.println();

        int min = Integer.MAX_VALUE;
        int count = 0;

        // 直接遍历已有的数组做统计,替换原有外部输入读取逻辑
        for (int y : numbers) {
            if(y < min){
                min = y;
                count += 1;
            }
        }
        System.out.println(count);
    }
}

运行java Bonus1 10就会先打印0-9的随机排列,再输出新最小值的统计次数,完全符合需求。

方案2:重定向标准输入(兼容原有Scanner逻辑)

如果你不想修改原来基于Scanner的统计代码,可以把洗牌后数组的内容转成字节流,重定向到System.in再供给Scanner读取:

import java.util.Scanner;
import java.io.ByteArrayInputStream;

public class Bonus1{
    public static void main(String[] args) {
        int n = Integer.parseInt(args[0]);
        int[] numbers = new int[n];
        for (int i = 0; i < n; i++ ) {
            numbers[i] = i;
        }
        StringBuilder sb = new StringBuilder();
        // 洗牌算法生成随机排列
        for (int i = 0; i < n; i++ ) {
            int r = i + (int)(Math.random() * (n - i));
            int tmp = numbers[i];
            numbers[i] = numbers[r];
            numbers[r] = tmp;
            System.out.print(numbers[i] + " ");
            sb.append(numbers[i]).append(" "); // 把排列内容暂存
        }
        System.out.println();

        // 重定向标准输入
        ByteArrayInputStream in = new ByteArrayInputStream(sb.toString().getBytes());
        System.setIn(in);
        Scanner data = new Scanner(System.in);

        int min = Integer.MAX_VALUE;
        int count = 0;

        // 原有统计逻辑完全不需要修改
        while(data.hasNext()){
            int y = data.nextInt();
            if(y < min){
                min = y;
                count += 1;
            }
        }
        System.out.println(count);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:36:03