【问题标题】:Not obtaining the correct output for the following code未获得以下代码的正确输出
【发布时间】:2020-06-02 02:27:41
【问题描述】:

我很好奇为什么以下代码的输出是 14 1。当我自己检查代码时,我发现 counter 等于 2,count 等于 4 .我想确保我们只打印第二个索引,所以我们只经过两次循环,对吗?

 package mix4;

public class Mix4 {

    int counter = 0; 

    public static void main(String[] args) {
        int count = 0; 
        Mix4[] m4a = new Mix4[20]; 
        int x = 0; 
        while(x < 9) {
            m4a[x] = new Mix4();
            m4a[x].counter = m4a[x].counter + 1; 
            count = count + 1; 
            count = count + m4a[x].maybeNew(x);
            x = x + 1; 
        }
        System.out.println(count + " " + m4a[1].counter);
    }

        public static int maybeNew(int index) {
            if (index < 5) {
                Mix4 m4 = new Mix4(); 
                m4.counter = m4.counter + 1;
                return 1;
            }

            return 0;

        }

    }

【问题讨论】:

    标签: java output


    【解决方案1】:

    你的 if 语句中的这段代码什么都不做

    Mix4 m4 = new Mix4(); 
    m4.counter = m4.counter + 1;
    

    m4 立即超出范围且未被使用。

    您的代码可以更改为

    count = count + maybeNew(x);  // static method
    

    和maybeNew 是一样的

    if (index < 5) {
            return 1;
        }
    
    return 0;
    

    不确定你想要什么逻辑,但这是你写的逻辑

    【讨论】:

    • 我确实意识到那段代码没用,但是,这是教科书上的代码,他们试图展示引用的使用。
    • 我明白你在说什么,不管怎样,它会返回 1。
    • 仅当x 小于5
    • 是的,正是我的意思。谢谢。
    【解决方案2】:

    mayBeNew 是一个静态方法。所以以下

    count = count + m4a[x].maybeNew(x);
    

    与

    没有什么不同
    count = count + Mix4.maybeNew(x);
    // or
    count = count + maybeNew(x);
    

    【讨论】:

      【解决方案3】:

      在while循环中,count加1,连续9次变为9。maybeNew方法的if部分运行5次,将count增加5。5之后,不影响count,因为它返回0。每个转到while循环,你正在创建一个新对象,它的初始计数器=0,然后程序将它增加1。maybeNew方法不会影响计数器,因为它创建了另一个对象并且它没有写入或保存到对象上数组。出于这个原因,您数组中的所有对象都有 counter=1。

      【讨论】:

      • 我看不到 count 每次通过循环时如何增加 1,相同的值。在我看来,count 从 0 开始,所以当我们在第一个循环中进行时,我们得到 1,然后我们将 count 与我们从 maybeNew(X) 得到的值相加,即 1,我得到2.
      • 对于 while 循环的前 5 次迭代,在“count = count + 1;”行,程序将 count 增加 1,在“count = count + m4a[x].maybeNew”行(X);”程序也将 count 增加 1,因为 MaybeNew 函数返回 1。之后, MaybeNew 方法返回 0 并且它不影响计数。计数将增加 1,共 4 次,最后计数为 14。我试图给出部分改变计数的部分。第一次迭代计数为 2,第二次为 4,第三次为 6,第四次为 8,第五次为 10,第六次为 11 ....第九次为 14。
      • 非常感谢。显示计数如何部分改变确实有帮助。我想我最初在到达打印声明时搞砸了。我意识到查看第一个索引仅适用于计数器变量。
      • 不客气。您可以使用调试来查看哪些行更改了特定变量。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 2012-11-08
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      相关资源
      最近更新 更多