Java randomRects方法循环逻辑异常:无法正确输出4个递增面积矩形
问题分析与修复方案
问题描述
需要实现randomRects方法:持续生成宽高为1-10的随机矩形,计算面积,直到输出4个连续面积递增的矩形后终止。当前代码存在两个问题:
- 循环条件设为
count<3时,仅输出3个递增矩形就提前终止 - 循环条件设为
count<4时,可能输出5个面积值,多生成不必要的矩形
核心问题
你的判断没错,这是典型的栅栏柱问题,再加初始值设置错误导致的计数错位:
- 初始
max=0:第一个矩形的面积必然大于0,导致count直接从1开始计数,但第一个矩形是序列起点,不该和0做递增判断 - 计数逻辑与循环条件不匹配: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
相关产品推荐
相关产品推荐

