执行意外数字的Java代码

执行意外数字的Java代码,java,Java,我得到了以下Java代码,我想了解它的计算方式 我知道它打印出1,1,0,0但根据我自己的“计算”,它应该打印出类似3、4、10的内容,当然我的思维方式肯定是错误的,但我不太确定,我的错误是什么 无论如何,代码是: public class Q11aFrom2013 { public static void main(String[] args) { int[] r = { 2, 3, 7, 12, 10 }; for (int i = 0; i <

我得到了以下Java代码,我想了解它的计算方式

我知道它打印出
1,1,0,0但根据我自己的“计算”,它应该打印出类似3、4、10的内容,当然我的思维方式肯定是错误的,但我不太确定,我的错误是什么

无论如何,代码是:

public class Q11aFrom2013 {

    public static void main(String[] args) {
        int[] r = { 2, 3, 7, 12, 10 };
        for (int i = 0; i < r.length - 1; i++)
            System.out.println(f(r[i + 1]));
    }

    public static int f(int r) {
        return r % 2;
    }
}
2013年起公开课Q11A{
公共静态void main(字符串[]args){
int[]r={2,3,7,12,10};
对于(int i=0;i
此外,我还记下了自己的计算结果,请随意查看以下图片,以便查看或发现,并可能告知我做错了什么,提前感谢:


问题是,返回的是发送到那里的数字的模。这是数字的剩余部分,除以%(在您的情况下为2)之后的值


因此,您将看到的唯一结果是奇数为1,偶数为0(除以2的余数)。

问题是,您返回的是发送到那里的数字的模。这是数字的剩余部分,除以%(在您的情况下为2)之后的值


因此,您将看到的唯一结果是奇数为1,偶数为0(除以2的余数)。

它取r[i+1]值,然后按2打印模

因此:

  • 第一:
    3模2==1
    ==2*1+1
  • 第二:
    7模2==1
    ==2*3+1
  • 第三:
    12模2==0
    ==2*6+0
  • 第四:
    10模2==0
    ==2*5+0

它取r[i+1]值,并按2打印模

因此:

  • 第一:
    3模2==1
    ==2*1+1
  • 第二:
    7模2==1
    ==2*3+1
  • 第三:
    12模2==0
    ==2*6+0
  • 第四:
    10模2==0
    ==2*5+0


返回的是带2的数字的模(
返回r%2;
),因此结果只能得到0或1。此处显示的代码应打印
3%2、7%2、12%2、10%2的结果,这些结果分别是
1、1、0、0
。它只能打印0、1(或-1,如果奇数为负数),因为您打印的是
数字为%2的结果。所以你不可能得到像3、4或10这样的结果(或者Java的数学被严重破坏了!!)@Antoh,谢谢,我很困惑我可能需要添加1,因为System.out.println(f(r[I+1])说的是+1,我想我应该忽略这整句话。@Zouzu,谢谢你,现在有意义了。fwiw:模函数x%n总是将值0返回到n-1。x%4返回0、1、2或3。x%3返回0、1或2。在您的例子中,x%2将给出0或1(是的,已经说过了,但只是用它来说明我的示例。)您返回的是数字的模和2(
返回r%2;
),因此结果只能得到0或1。此处显示的代码应打印
3%2、7%2、12%2、10%2的结果,这些结果分别是
1、1、0、0
。它只能打印0、1(或-1,如果奇数为负数),因为您打印的是
数字为%2的结果。所以你不可能得到像3、4或10这样的结果(或者Java的数学被严重破坏了!!)@Antoh,谢谢,我很困惑我可能需要添加1,因为System.out.println(f(r[I+1])说的是+1,我想我应该忽略这整句话。@Zouzu,谢谢你,现在有意义了。fwiw:模函数x%n总是将值0返回到n-1。x%4返回0、1、2或3。x%3返回0、1或2。在你的例子中,x%2会给出0或1(是的,已经说过了,但只是用它来说明我的例子。)哇,这很好,我现在将重新写笔记,谢谢:)还有一个问题,我在写下你给出的答案时注意到了,为什么我们忽略了数组r的第一个元素,即数字2?为什么我们跳过它并从3开始?@Acemi因为您正在调用
f(r[i+1])
,所以您永远不会使用数组的第一个元素调用
f
方法(0是第一个索引值)。您可以调用
f(r[1])
f(r[2])
等,但决不调用
f(r[0])
。要解决这个问题,您必须更改循环:
for(inti=0;iWow,这很好,我现在将重新写笔记,谢谢:)1另外一个问题,我在写下您给出的答案时注意到了,为什么我们忽略了数组r的第一个元素,即数字2?为什么我们跳过它并从3开始?@Acemi因为您正在调用
f(r[i+1])
,所以您永远不会使用数组的第一个元素调用
f
方法(0是第一个索引值)。您可以调用
f(r[1])
f(r[2])
等,但决不调用
f(r[0])
。要解决这个问题,您必须更改循环:
for(int i=0;我感谢您的回答。如果这有助于您了解发生了什么,请将其标记为一个答案,以便其他人能够轻松找到解决类似问题的方法。感谢您的回答。如果这有助于您了解发生了什么,请将其标记为一个答案,以便其他人能够轻松找到答案找出解决类似问题的方法。