java - Java 程序中的数组异常行为

标签 java

<分区>

我遇到了这个 Java 程序,它以意想不到的方式运行。以下程序计算 int 数组中元素对之间的差异。

import java.util.*;

public class SetTest
{
       public static void main(String[] args)
       {
            int vals[] = {786,678,567,456,
                          345,234,123,012};

            Set<Integer> diffs = new HashSet<Integer>();

            for(int i=0; i < vals.length ; i++)
                for(int j = i; j < vals.length; j++)
                       diffs.add(vals[i] - vals[j]);

            System.out.print(diffs.size());
       }
}

如果我们分析它似乎设置大小应该是 8,这是数组的大小。但是如果你运行这个程序,它会打印出 14。这是怎么回事?任何的想法?

提前致谢。

答案:发生这种奇怪的行为是因为数组中的 012 变为八进制,如果我们将它更改为 12,那么它会按预期打印 8。

教训:永远不要用零填充整数文字。

最佳答案

你有没有注意到 012 (八进制)是 10(十进制)?

关于java - Java 程序中的数组异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5220414/

相关文章:

java - JAX-B 正在编码一切

Java ByteArrayInputStream.read 结果保存在字节数组中——保存 ASCII 值

java - KMP DFA前缀函数

java - TabHost.TabSpec 内容未出现

java - 如何使用java代码在jsp页面中查看excel文件?

java - 如何有效控制实现多接口(interface)的类对象?

java - 实时应用程序中的 JRuby、大型数组和性能问题

java - 如何在单独的 View 中创建新控制台

java - Spotfire:如何调用 Spotfire Web 服务并获取 pdf 报告 - 系统集成

java - 在getView里面写方法