如何跳过特定的循环循环?
How to skip specific cycle loops?
我想创建这样一个Shape。
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, 0, 20, 5);
drawLine(pane, 70, 110, 5);
drawLine(pane, 160, 200, 5);
drawLine(pane, 250, 290, 5);
drawLine(pane, 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, 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)))));
}
}
我想创建这样一个Shape。
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, 0, 20, 5);
drawLine(pane, 70, 110, 5);
drawLine(pane, 160, 200, 5);
drawLine(pane, 250, 290, 5);
drawLine(pane, 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, 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)))));
}
}