Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 为什么输出1 2 3 3不是1 2 3 1整数除法_Java - Fatal编程技术网

Java 为什么输出1 2 3 3不是1 2 3 1整数除法

Java 为什么输出1 2 3 3不是1 2 3 1整数除法,java,Java,为什么这个程序的输出是1233而不是1231 class Scratch { public static void main(String[] args) { int[] a = { 1, 2, 3, 4, 5, 3 }; for (int i = 0; i < 6; i++) System.out.print(a[i / 2] + " "); } } 类刮擦{ 公共静态void main(字符串[]args){ i

为什么这个程序的输出是
1233
而不是
1231

class Scratch {
    public static void main(String[] args) {
        int[] a = { 1, 2, 3, 4, 5, 3 };
        for (int i = 0; i < 6; i++)
            System.out.print(a[i / 2] + " ");
    }
}
类刮擦{
公共静态void main(字符串[]args){
int[]a={1,2,3,4,5,3};
对于(int i=0;i<6;i++)
系统输出打印(a[i/2]+“”);
}
}

当你除以3/2,它等于1.5,我认为Java只取整数的第一个值。发生了什么?

循环的最后一次迭代将在i=5时进行。5/2 = 2. a[2]=3

循环的最后一次迭代将在i=5时进行。5/2 = 2. a[2]=3

i/2
是一个整数除法,它将通过丢弃小数部分来有效地占用生成值的下限


这将导致
a[0/2=0]
a[1/2=0]
a[2/2=1]
a[3/2=1]
a[4/2=2]
a[5/2=2]
在代码中访问数组元素。

i/2
是一个整数除法,它将通过丢弃小数部分有效地占据生成值的底部


这将导致
a[0/2=0]
a[1/2=0]
a[2/2=1]
a[3/2=1]
a[4/2=2]
a[5/2=2]
在代码中访问数组元素。

您是在除以索引,而不是值。要获得所需的结果,应将除法置于方括号外:

System.out.print(a[i] / 2 + " ");
// Here --------------^

您正在除以索引而不是。要获得所需的结果,应将除法置于方括号外:

System.out.print(a[i] / 2 + " ");
// Here --------------^

因为循环的最后一个数字是5。 然后5/2=2.5,java将其转换为2。
如果你看到你的数组,它显示在位置2,打印的数字是3。

因为你的循环的最后一个数字是5。 然后5/2=2.5,java将其转换为2。
如果你看到数组,在位置2,打印的数字是3。

我认为你犯的错误是,你认为数组中存储的值被2除,而不是索引。或者更重要的是,你让值3不是你期望数组中最后一个值的事实影响你对数组查找结果的感知。把这些分开是很重要的


您的代码正在查找(0,1,2,3,4,5)全部除以2,即(0,0,1,1,1,2,2)整数除法。也就是说,
a[5/2]
=
a[2]
=3。

我认为您犯的错误是,您认为数组中存储的值被2除,而不是索引。或者更重要的是,你让值3不是你期望数组中最后一个值的事实影响你对数组查找结果的感知。把这些分开是很重要的


您的代码正在查找(0,1,2,3,4,5)全部除以2,即(0,0,1,1,1,2,2)整数除法。也就是说,
a[5/2]
=
a[2]
=3。

5/2=2。你认为a[2]如何等于1?@LưuVĩnhPhúc 5/2=3,余数为2,由于四舍五入,a[2]等于2。但3/2并不等于3,即使以双精度四舍五入,也将是1.55/2=2。你认为a[2]如何等于1?@LưuVĩnhPhúc 5/2=3,余数为2,由于四舍五入,a[2]等于2。但是3/2不等于3,即使用双精度四舍五入,它也会是1.5。我完全相信,关键是要在这里除以索引访问,否则第一个值会得到0。谁否决了这个,为什么?这是正确的。@EJK:你会得到
01121
,这与OP所说的不一致。@Makoto-我想这篇文章有点不清楚。OP确实说了“因为当你除以3/2….”这意味着意图是处理值,而不是索引。但是你的观点也是正确的。@EJK:我强烈不同意这篇文章不清楚。你可以读得快一点,然后做出假设,但这真的不是问题的错……我完全相信,关键是要在这里划分索引访问,否则第一个值会得到0。谁否决了这个,为什么?这是正确的。@EJK:你会得到
01121
,这与OP所说的不一致。@Makoto-我想这篇文章有点不清楚。OP确实说了“因为当你除以3/2….”这意味着意图是处理值,而不是索引。但是你的观点也是正确的。@EJK:我强烈不同意这篇文章不清楚。你可以读得快一点,然后假设一些事情,但这真的不是问题的错。。。