java - 如何倒回 for 循环?

标签 java for-loop

如何倒回或返回到 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/

相关文章:

javascript - 在 Javascript 中,While 循环在控制台上运行时从 1 计数到 5 时重复最后一个数字

Java:查找百分比差异

java - 如何使用 for 循环创建新按钮对象并使用 javafx 显示它

c - 在 C 中搜索另一个数组时将值插入数组?

java - eDirectory 查询返回不愿意执行 LDAPSearchException

java - 将 Spring 与 App Engine 结合使用

java - 为什么在运行示例程序时出现找不到主要方法的错误?

java - 带有导出包的 Eclipse OSGi 片段

python - python中select语句中的mysql for循环

java - 在 LibGDX 中实现 Box2D 碰撞的简洁方法