Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未获得以下代码的正确输出_Java_Output - Fatal编程技术网

Java 未获得以下代码的正确输出

Java 未获得以下代码的正确输出,java,output,Java,Output,我很好奇为什么下面代码的输出是14 1。当我自己检查代码时,计数器等于2,计数等于4。我想确保我们只打印第二个索引,所以我们只需要循环两次,对吗 package mix4; public class Mix4 { int counter = 0; public static void main(String[] args) { int count = 0; Mix4[] m4a = new Mix4[20]; int

我很好奇为什么下面代码的输出是14 1。当我自己检查代码时,
计数器
等于2,
计数
等于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;

        }

    }
packagemix4;
公共类Mix4{
int计数器=0;
公共静态void main(字符串[]args){
整数计数=0;
Mix4[]m4a=新的Mix4[20];
int x=0;
而(x<9){
m4a[x]=新的Mix4();
m4a[x]。计数器=m4a[x]。计数器+1;
计数=计数+1;
count=count+m4a[x].maybeNew(x);
x=x+1;
}
System.out.println(计数+“”+m4a[1]。计数器);
}
公共静态int-maybeNew(int索引){
如果(指数<5){
Mix4 m4=新的Mix4();
m4.计数器=m4.计数器+1;
返回1;
}
返回0;
}
}

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;
if(索引<5){
返回1;
}
返回0;

确定您想要什么逻辑,但这是您编写的逻辑

mayBeNew
是一种静态方法。那么下面

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

count = count + Mix4.maybeNew(x);
// or
count = count + maybeNew(x);

在while循环中,count按1递增9倍并变为9。maybeNew方法的if part运行5次并增加计数5。在5之后,它不会影响计数,因为它返回0。在while循环的每一圈中,您都在创建一个新对象,它的初始计数器为0,然后程序将其增加1。maybeNew方法不会影响计数器,因为它会创建另一个对象,并且不会写入或保存到数组中的对象。由于这个原因,数组中的所有对象都有counter=1。

我明确意识到这段代码是无用的,但是,这是教科书中的一段代码,它们试图显示引用的用法。我理解您的意思,不管怎样,它将返回1。只有
x
小于
5
是,正是我的意思。谢谢。我不知道每次循环时计数是如何增加1的,相同的值。在我看来,count从0开始,所以当我们在第一个循环中通过时,我们得到1,然后我们将count与从maybeNew(X)得到的值相加,即1,我得到2。对于while循环的前5次迭代,在“count=count+1;”行,程序将count增加1,在“count=count+m4a[X]行。maybeNew(X);”程序也会将计数增加1,因为maybeNew函数返回1。然后,maybeNew方法返回0,并且不影响计数。计数将增加1,持续4次,最后计数将增加14次。我试图给出部分改变计数的部分。第一次迭代使计数2、第二次4、第三次6、第四次8、第五次10、第六次11。。。。非常感谢你。显示计数如何部分改变确实有帮助。我想我一开始拿到打印报表就搞砸了。我意识到查看第一个索引只针对计数器变量。不客气。可以使用调试查看哪些行更改了特定变量。