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

Java randomRects方法循环逻辑异常:无法正确输出4个递增面积矩形

问题分析与修复方案

问题描述

需要实现randomRects方法:持续生成宽高为1-10的随机矩形,计算面积,直到输出4个连续面积递增的矩形后终止。当前代码存在两个问题:

  • 循环条件设为count<3时,仅输出3个递增矩形就提前终止
  • 循环条件设为count<4时,可能输出5个面积值,多生成不必要的矩形

核心问题

你的判断没错,这是典型的栅栏柱问题,再加初始值设置错误导致的计数错位:

  1. 初始max=0:第一个矩形的面积必然大于0,导致count直接从1开始计数,但第一个矩形是序列起点,不该和0做递增判断
  2. 计数逻辑与循环条件不匹配:4个连续递增的矩形需要3次“后一个>前一个”的递增判断,当前代码把第一个矩形和0的比较也算作一次递增,导致计数偏移

修复后的代码

import java.util.Random;

public static void randomRects(){
    Random r = new Random();
    // 先生成第一个矩形作为序列起点
    int w = r.nextInt(10) + 1;
    int h = r.nextInt(10) + 1;
    int max = w * h;
    System.out.println("w: " + w + ", h: " + h + ", area: " + max);
    
    int count = 0;
    // 需要3次连续递增,才能凑够4个递增矩形
    while(count < 3){
        w = r.nextInt(10) + 1;
        h = r.nextInt(10) + 1;
        int area = w * h;
        
        if(area > max){
            count++;
        }else{
            // 递增中断,重置计数
            count = 0;
        }
        max = area;
        System.out.println("w: " + w + ", h: " + h + ", area: " + area);
    }
    System.out.println("Four rectangles of increasing area.");
}

修复说明

  • 先初始化第一个矩形:避免和0比较导致的错误计数,直接作为序列的第一个元素输出
  • 计数逻辑调整:count记录连续递增的次数,初始为0,每出现一次后一个面积大于前一个就+1,中断则重置为0
  • 循环条件count < 3:当完成3次连续递增时,加上第一个矩形正好是4个连续递增的矩形,此时终止循环,不会出现少输出或多输出的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:11:16