- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何倒回或返回到 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);
}
这是一个 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
当您回到循环顶部的测试时。但在if
当arr[y]!=0
您正在设置x
至0
然后是 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/
我基本上想操纵连接到终端的某些程序的输出,以便文本的底部始终是一些任意文本 block (我们称之为页脚),而程序的正常输出显示在上面.如果此页脚仅限于单个终端行,只需清除当前行,在每次 write
我有一个 NSData,我想将其作为 NSInputStream 读取。这样我就可以拥有一致的 API 来处理文件和内存中的数据。作为处理的一部分,我想确保流以某些字节集开头(如果不是,我需要以不同的
我正在尝试在使用 embarcadero 的 c++builder(Tokyo 10.2 Update 3)构建的程序中解析 JSON,考虑到他们严重缺乏文档,这并不容易。 我正在使用 TJSONIt
MongoDB 聚合每分钟都在指数级地复杂化! 我目前是 $unwind 一个嵌套数组,然后通过 _id 中的每个对象执行 $lookup展开的嵌套数组。我最后的尝试是用 $group 来逆转展开。但
当我尝试在 python 中逐行打印文件内容时,如果文件是由 打开(“文件名”)作为f:但是,如果我使用 open("file_name") as f: ,我就可以做到这一点然后f.seek(0) 以
我是一名优秀的程序员,十分优秀!