Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在单循环中仅使用单个变量打印以下系列_Java_Arrays_For Loop_Data Structures - Fatal编程技术网

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语言?这似乎与该主题毫无关系。