gpt4 book ai didi

java - 如何倒回 for 循环?

转载 作者:行者123 更新时间:2023-12-01 16:55:04 24 4
gpt4 key购买 nike

如何倒回或返回到 for 循环的开头?

我尝试在 else 语句中使用“x=0”,如下所示:

            outerloop:
for(int x=0; x<arr.length; x++){
if(counter == countnum){
if(arr[x]!=0){
temp1 = Integer.toString(arr[x]);
death = death + " " + temp1;
arr[x] = 0;
counter=1;
}
}

else{
counter++;
}

if(x==(arr.length-1)){
for(int y=0; y<arr.length; y++){
if(arr[y]!=0){
x=0;
}
else
break outerloop;
}
}
}

这不起作用。我发现了迭代器,但我认为它不起作用,相反,我不明白它是如何工作的。

这是一个更新,因为似乎没有人理解我的情况:

这就是我想要发生的事情:

对于输入:1 2 3 4

输入序列为2,则输出应重新排列:2 4 3 1根据输入顺序。所以我尝试将 for 循环计数返回到 0,但它只显示: 2 4。它不会返回到 x=0 其中 arr[x(which is =0)]。这是我的问题。

如果您愿意,这是我的整个源代码:

import java.util.Random;

import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Color;
import java.awt.Dimension;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTextArea;

public class Josephus extends JFrame {

JLabel title;
JLabel men;
JLabel count;
JTextField mentext;
JTextField countext;
JTextArea display;
JButton execute;
JButton close;
String menstring;
String countstring;
int menum;
int countnum;
Random rand = new Random();
String generation = "Generated Men: ";
String death = "Death Series: ";
int counter = 1;

public Josephus(){

super("");

setLayout(null);

title = new JLabel("Death Execution");
title.setFont(new Font("Calibre", Font.BOLD, 20));
title.setBounds(350, 15, 400, 25);
add(title);

men = new JLabel("Number of Men");
men.setBounds(10, 60, 400, 25);
add(men);

mentext = new JTextField();
mentext.setBounds(120, 60, 150, 25);
add(mentext);

count = new JLabel("Count of Death");
count.setBounds(10, 100, 400, 25);
add(count);

countext = new JTextField(10);
countext.setBounds(120, 100, 150, 25);
add(countext);

display = new JTextArea(5, 20);
display.setEditable(false);
display.setBounds(290, 60, 280, 200);
add(display);

execute = new JButton("Execute");
execute.setBounds(105, 230, 80, 30);
add(execute);

execute.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String temp;
String temp1;
menstring = mentext.getText();
countstring = countext.getText();
menum = Integer.parseInt(menstring);
countnum = Integer.parseInt(countstring);

int arr[] = new int[menum];

for(int x=0; x<arr.length; x++){
if(x!=0){
if(arr[x]!=arr[x-1])
arr[x] = rand.nextInt(500)+1;
else
x--;
}
else
arr[x] = rand.nextInt(500)+1;
}

for(int x=0; x<arr.length; x++){
temp = Integer.toString(arr[x]);
generation = generation + " " + temp;
}

outerloop:
for(int x=0; x<arr.length; x++){
if(counter == countnum){
if(arr[x]!=0){
temp1 = Integer.toString(arr[x]);
death = death + " " + temp1;
arr[x] = 0;
counter=1;
}
}

else{
counter++;
}

if(x==(arr.length-1)){
for(int y=0; y<arr.length; y++){
if(arr[y]!=0){
x=0;
}
else
break outerloop;
}
}
}

display.setText(generation + "\n" + death);
}
});

close = new JButton("Close");
close.setBounds(200, 230, 70, 30);
add(close);

close.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
}

public static void main(String[] args){
Josephus frame = new Josephus();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setSize(600, 330);
frame.setVisible(true);

}

Here's something...

这是一个 JOSEPHUS EXECUTION 程序...

编辑:

我找到了解决方案。

最佳答案

for循环

for(int x=0; x<arr.length; x++)

初始化x=0一开始。 (它的第一个表达式。)在每次执行循环体之前,它都会测试 x<arr.length 。 (它的第二个表达式。)在循环体之后但在下一个测试之前,它执行 x++ 。 (第三个表达式。)

所以x++ for(int x=0; x<arr.length; x++)的发生在循环中的所有代码之后。然后重新进行测试。您想要x成为0当您回到循环顶部的测试时。但在ifarr[y]!=0您正在设置x0然后是 x++在 for 循环中使其成为 1 重做测试之前。

所以你需要设置x=-1 。然后是x++在 for 循环中使其成为 0在重做测试之前。然后用 x 重新进行测试0 .

PS(在谷歌上搜索你没有解释的内容之后。)(虽然你的代码似乎想要执行到没有幸存者,所以我会假设。)

顶部if “执行”x arr 的第一个元素如果是countnum,则将其设置为零第一个非零 arr最后一个模后的元素 arr.length 。若底if包裹x返回-1来自arr.length-1 (根据上述)那么第三条语句可以 break主循环当 arr全部为零。或者如果底部if包裹x返回 arr 的第一个非零元素通过x=y-1里面for(int y=0; y<arr.length; y++)然后当x==arr.length-1时您可以从主循环中断。但不幸的是,一旦找到零元素,您当前的代码就会从寻找下一个非零元素的循环中退出主循环。

关于java - 如何倒回 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34250379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com