如何跳过特定的循环循环?

问题描述

我想创建这样一个形状。

enter image description here

只需画一个 Circle,然后画一个 Lines

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.stage.Stage;

public class SkipPartsOfCycle extends Application {

    @Override
    public void start(Stage stage) {
        var pane = new Pane();
        pane.getChildren().add(new Circle(500,500,100,Color.GREEN));
        drawLine(pane,20,5);
        drawLine(pane,70,110,160,200,250,290,340,360,5);
        stage.setScene(new Scene(pane,1000,1000));
        stage.show();
    }

    public static void drawLine (Pane pane,int start,int end,int increment) {
        for (var i = start; i <= end; i += increment) {
            pane.getChildren().add(new Line(500,500 + (100 * Math.sin(Math.toRadians(i))),500 + (100 * Math.cos(Math.toRadians(i)))));
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

此代码有效。问题是要跳过循环的特定部分,我会在特定范围内多次调用它。另一种解决方案是将条件插入循环中,但会不必要地复杂化。

最大的问题是,由于我多次调用它,因此在更改时(例如 0-30,60-120,150-210,240-300,330-360)需要修改所有方法调用,而不仅仅是一个。

请问有更简单的解决方案吗?

解决方法

只要循环步骤在测量 0、90、180 和 270 度的角度之前或之后的 20 度以内,您就可以将问题归结为绘制线条,因此一些分支逻辑应该可以让您一次绘制图形.

事实上,创建一个方法并调用它五次就开销而言并不是什么大问题,更不用说让您的代码更加灵活了,因此您的解决方案实际上并不坏。

for (var i = 0; i <= 360; i += 5) {
            if((i <= 20) || 
              (i >= 70 && i <= 110) ||
              (i >= 160 && i <= 200) ||
              (i >= 250 && i <= 290)
              (i >= 340))
            {
                pane.getChildren().add(new Line(500,500,500 + (100 * Math.sin(Math.toRadians(i))),500 + (100 * Math.cos(Math.toRadians(i)))));
            }
        }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...