【问题标题】:Pre increment on arrays数组的预增量
【发布时间】:2015-11-13 05:46:29
【问题描述】:

谁能解释这段代码的输出?我一直很难理解,但我就是不明白。

public static void main(String ars[]) {
    int responses[] = {1,2,4,4};
    int freq[] = new int[5];

    for(int answer = 1; answer < responses.length; answer++) {
        ++freq[responses[answer]];
    }

    for (int rating = 1; rating < freq.length; rating++)
         System.out.printf("%6d%10d\n", rating, freq[rating]);
}

输出

 1         0
 2         1
 3         0
 4         2

【问题讨论】:

  • 你可能想在你的第一个循环中打印出 freq 的所有值,看看会发生什么
  • 您的问题标题可能暴露了您混淆的本质:预增量运算符不适用于数组,并且您提供的代码没有显示预增量数组。相反,预增量运算符适用于数组元素,即freq[responses[answer]].
  • 另请注意,Java 数组从 0 开始索引,但您的 for 循环忽略每个数组的元素 0。

标签: java arrays post-increment


【解决方案1】:

在第一个循环中 ++freq[responses[answer]];意思是:

  • responses[answer] 从响应数组索引中获取值。
  • Freq[value] 检查并从过滤器数组索引中获取值。
  • ++Freq[value] 将值 1 添加到 Freq[value]。

【讨论】:

    【解决方案2】:

    我试着把事情简单化了一点,这样你就可以看到发生了什么:

        int responses[] = new int[4];
        responses[0] = 1;
        responses[1] = 2;
        responses[2] = 4;
        responses[3] = 4;
    
        int freq[] = new int[5];
    
        for(int answer = 1; answer < 4; answer++)
        {
            int x = responses[answer];
            freq[x] = freq[x] + 1;
        }
    
        for (int rating = 1; rating < 5; rating++)
        {  
             //Print 6 spaces and then the rating variable
             //Print 10 spaces then the integer at freq[rating]
    
             System.out.printf("%6d%10d\n", rating, freq[rating]);
        } 
    

    我会查找++ prefix & postfix

    【讨论】:

    • 对于 freq[1] 的值 y=1 是否正确 - 第一个循环
    • 这样更有意义吗?我认为简单的代码可能比写一大段更容易。
    • 对于 freq[1] 的值 y=1 是否正确 - 第一个循环
    • 是的,在该循环的第一遍中,答案等于 1。然后将“x”设置为等于响应 [1],即 2。“Y”设置为等于 freq[2],即是 0。所以 freq[x] = 0 + 1。所以当你进入第二个 for 循环时,freq[1] 将为 0,但 freq[2] 为 1!
    • 我哭了,我不知道为什么我没有得到与输出相同的结果。第一个循环用于将值分配给频率数组,第二个循环用于打印值?
    猜你喜欢
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2014-07-18
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多