【问题标题】:Why for loop is behaving differently?为什么 for 循环的行为不同?
【发布时间】:2019-10-14 13:47:36
【问题描述】:

在这里,我尝试使用 for 循环反转一个数字,但是当 n=1234 时,它只给出输出 432。 请解释为什么 for 循环的行为不同。

当我使用条件 while(n>0) 尝试使用 while 循环出现相同的问题时,它按预期工作并给出了所需的输出

Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int rev=0;
for(int i=1;i<=n;i++){
    int temp=n%10;
    n=n/10;
    rev=rev*10+temp;        
}

System.out.println(rev);

当 n=1234 时,预期输出为 4321,但输出为 432

【问题讨论】:

  • 你试过调试你的代码吗?
  • 提示:考虑打印你的中间结果,以便更好地理解你的代码在做什么。你通过创造性来学习编程。向他人寻求解释应该是你最后的手段,而不是第一个手段。
  • 即使我从 0 开始,它也会给出相同的输出
  • while(n>0) 在您的情况下将是一个更好的循环条件。
  • 为什么还需要i

标签: java


【解决方案1】:

看来你需要阅读更多关于 java 循环的内容

当您使用 for 循环时,您会遍历从 1(在您的情况下)到 n 的所有数字

当你使用while 时,你一直到 n 为 0

您可以看到最终得到的值之间存在差异,我真的建议您在继续之前多看一些教程:)

【讨论】:

  • 但是当 n=1234 所以 i=1 到 i
  • @Abhishek 但你在改变 n :) n 最后等于 0
  • 即使我尝试使用 i=1 到 i
  • @Abhishek 没问题 :) 如果是,请将答案标记为正确 :)
【解决方案2】:

先了解你想要达到的目标:为了反转一个数字

输入:数字

(1) 初始化reverse_num = 0

(2) 当 num > 0 时循环 (a) 将 reverse_num 乘以 10 并添加 num 的余数
除以 10 到 rev_num reverse_num = reverse_num*10 + num%10; (b) 将 num 除以 10

(3) 打印 reverse_num

您正在使用的 for 循环正在考虑从 1 到 1234(1、2、3、4、5、6......1234)的所有值

当您使用 while 循环时,您只有一个条件 if num>0,这是我们需要的,因此它可以工作。

 Scanner sc=new Scanner(System.in);
          int num=sc.nextInt();
          int reversed = 0;
            while(num >0) {
                int digit = num % 10;
                reversed = reversed * 10 + digit;
                num /= 10;
            }
          System.out.println(reversed); 
        }

【讨论】:

  • 在这里帮助:)
【解决方案3】:

试试这个:

Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int rev=0;
while(n>0)
{
   int temp=n%10;
   rev=rev*10+temp;
   n=n/10;
}
System.out.println(rev);

while会更好用

【讨论】:

    【解决方案4】:

    算法如何与 while 一起工作,以及为什么需要切割直到 n=0(例如 1234):while(执行此操作直到 n == 0)。

    第一次尝试:

    第一行:temp=n%10 所以 temp=1234%10=4. 第二行:n=n/10 所以 n=1234/10=123 第三行:rev=rev*10+temp 所以 0*10+4=4;

    下一次尝试:

    第一行:temp=n%10 所以 temp=123%10=3,第二行:n=n/10 所以 n=123/10=12, 第三行:rev=rev*10+temp so 4*10+3=43;

    下一次尝试:

    第一行:temp=n%10 所以 temp=12%10=2 第二行:n=n/10 所以 n=12/10=1.2(1,int) 第三行:rev=rev*10+temp so 43*10+2=432;

    最终尝试:

    第一行:temp=n%10 所以 temp=1%10=1 第二行:n=n/10 所以 n=1/10=0.1(0,int),第三行:rev=rev*10+temp 所以 REV 是 432*10+1=4321;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 2022-12-04
      • 2023-03-31
      相关资源
      最近更新 更多