为什么for循环的行为有所不同?

时间:2019-10-14 13:47:36

标签: java

在这里,我尝试使用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

4 个答案:

答案 0 :(得分:0)

似乎您需要阅读有关Java循环的更多信息

使用t0 = datenum('1900-01-01 00:00:00', 'yyyy-mm-dd HH:MM:SS'); time = time/24 + t0; time = datetime(time,'ConvertFrom','datenum'); 循环时,您会遍历从1(在您的情况下)到n的所有数字

,当您使用for时,直到n为0

您会发现最终得到的值之间存在差异,我真的建议您在继续进行:)

答案 1 :(得分:0)

了解您要首先实现的目标:反转数字

输入:num

(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循环时,如果我们需要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); 
        }

答案 2 :(得分:0)

尝试这样的方式:

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);

时使用会更好

答案 3 :(得分:0)

该算法如何与while一起使用以及为什么需要剪切直到l n = 0(以1234为例):while(执行此操作直到l 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所以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