Java 在单循环中仅使用单个变量打印以下系列
我试图无限打印以下序列:Java 在单循环中仅使用单个变量打印以下系列,java,arrays,for-loop,data-structures,Java,Arrays,For Loop,Data Structures,我试图无限打印以下序列: 0 100 1 99 2 98 . . . . . . 97 3 98 2 99 1 100 0 99 1 98 2 97 3 . . . . . . 3 97 2 98 1 99 0 100 . . . . . . 但是,当我运行这个时,模式只打印一次 这是我的密码: public class P
0 100
1 99
2 98
. .
. .
. .
97 3
98 2
99 1
100 0
99 1
98 2
97 3
. .
. .
. .
3 97
2 98
1 99
0 100
. .
. .
. .
但是,当我运行这个时,模式只打印一次
这是我的密码:
public class PrintSequence {
public static void main(String args[]) {
int i=0;
while(true)
{
if(i<=100) {
System.out.println(i+ " " + (100-i));
i++;
}
}
}
}
公共类打印序列{
公共静态void main(字符串参数[]){
int i=0;
while(true)
{
如果(i需要两个技巧来解决这个问题:
- 认识到从
0100
返回到0100
的整个循环是200次迭代,然后使用%
余数运算符在0-199范围内编写一个无限循环
- 使用1将负数转换为正数
下面是两行代码,它们将生成所需的无限输出:
for (int i = 0; ; i = (i + 1) % 200)
System.out.printf("%-6d%d%n", 100 - Math.abs(100 - i), Math.abs(100 - i));
解释
for(;;)
是一个“永远”(forever)运行的循环。它与for(;;true;)
相同,与while(true)
相同,但是使用for
可以将int i=0
循环和i=(i+1)%200一起保留在一行代码中
i=(i+1)%200
意味着当i=199
时,下一个值是i=0
,再次开始序列,永远在值0..199之间迭代
100-i
使序列0..199变为100..-99
Math.abs(100-i)
使序列变为100..0..99,即输出的第二列
100-Math.abs(100-i)
使序列变为0..100..1,即输出的第一列
printf(“%-6d%d%n”,…)
使它可以在两列中很好地打印
1) 如果不允许使用Math.abs()
,请使用?:
三元条件运算符:
printf(“%-6d%d%n”,(i<100?i:200-i),(i<100?100-i:i-100))
您可以按如下方式执行:
public class Main {
public static void main(String[] args) {
int i = 0;
while (true) {
if (i <= 100) {
System.out.println(i + "\t" + (100 - i));
i++;
} else if (i <= 200) {
System.out.println((200 - i) + "\t" + (i - 100));
i++;
}
if (i == 200) {
i = 0;
}
}
}
}
公共类主{
公共静态void main(字符串[]args){
int i=0;
while(true){
如果(我请改进您的问题:向我们展示您的尝试,并使用它来帮助我们提出更具体、更高质量的问题。请查看和,以获取有关此网站最佳实践的更多信息。void print_number(void){for(int i=0;i==0;++i){put("0 100 1 99 2 98 . . . . . . 97 3 98 2 99 1 100 0 99 1 98 2 97 3 . . . . . . 3 97 2 98 1 99 0 100 1 99 2 98 3 97 . . . . . .");}}
没有帮助,但你没有表现出任何尝试,而且在技术上满足了你的要求。很抱歉@Hovercraft输入错误。我已经做了更正。@hovercraftfullofels。我也添加了我的代码。请好奇,你为什么要标记C语言?这似乎与该主题毫无关系。