整数数组的ArrayList

2024-02-16

我正在尝试编写一个简单的游戏,其中敌人在网格上追逐玩家。我正在使用维基百科寻路页面上的简单寻路算法。这涉及创建两个列表,每个列表项包含 3 个整数。这是我尝试构建和显示这样一个列表的测试代码。

当我运行以下代码时,它会为 ArrayList 中的每个数组打印出相同的数字。为什么要这样做?

public class ListTest {

public static void main(String[] args) {
    ArrayList<Integer[]> list = new ArrayList<Integer[]>(); 
    Integer[] point = new Integer[3];
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 3; j++) {
            point[j] = (int)(Math.random() * 10);
        }            

        //Doesn't this line add filled Integer[] point to the 
        //end of ArrayList list?
        list.add(point);      

        //Added this line to confirm that Integer[] point is actually 
        //being filled with 3 random ints.
        System.out.println(point[0] + "," + point[1] + "," + point[2]);
    }
    System.out.println();

    //My current understanding is that this section should step through 
    //ArrayList list and retrieve each Integer[] point added above. It runs, but only 
    //the values of the last Integer[] point from above are displayed 10 times.
    Iterator it = list.iterator();
    while (it.hasNext()) {
        point = (Integer[])it.next();  
        for (int i = 0; i < 3; i++) {
            System.out.print(point[i] + ",");
        } 
            System.out.println(); 
        } 
    }
}

首先,其他几个答案是误导性的和/或不正确的。请注意,数组是一个对象。因此,您可以将它们用作列表中的元素,无论数组本身是否包含基本类型或对象引用。

接下来,将变量声明为List<int[]> list优于将其声明为ArrayList<int[]>。这使您可以轻松更改List to a LinkedList或其他一些实现,而不会破坏代码的其余部分,因为它保证只使用List界面。要了解更多信息,您应该研究“接口编程”。

现在回答您真正的问题,该问题仅作为评论添加。让我们看一下您的几行代码:

Integer[] point = new Integer[3];

这一行创建了一个数组Integer显然。

for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 3; j++) {
        point[j] = (int)(Math.random() * 10);
    }            

    //Doesn't this line add filled Integer[] point to the 
    //end of ArrayList list?
    list.add(point);
    //...
}

在这里,您为数组的元素赋值,然后添加参考到数组到你的List。每次循环迭代时,您都会分配新值到同一个数组并添加对同一数组的另一个引用 to the List。这意味着List有 10 条参考文献到同一个数组已经被反复写过。

迭代器 it = list.iterator(); while (it.hasNext()) { 点 = (Integer[])it.next(); for (int i = 0; i

现在这个循环打印出相同的数组10倍。数组中的值是上一个循环结束时设置的最后一个值。

要解决该问题,您只需确保创建 10 个不同的 arrays.

最后一个问题:如果你声明it as Iterator<Integer[]> it (or Iterator<int[]> it),您不需要转换返回值it.next()。事实上,这是首选,因为它是类型安全的。

最后我想问一下什么是int每个数组中的s代表?您可能需要重新审视您的程序设计并创建一个包含这三个内容的类ints,可以是一个数组,也可以是三个成员变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

整数数组的ArrayList 的相关文章

随机推荐

  • 基于视图的 NSOutlineView 标题单元格字体问题

    我目前正在尝试在我的 Cocoa 应用程序中使用新的基于视图的 NSOutlineView 由于我没有使用绑定 因此我在控制器中实现了所有必需的委托和数据源方法 在界面生成器中 我添加了一个 NSOutlineView 其突出显示设置为来源
  • 如何使用 MATLAB 找到两个斑点(轮廓/闭合曲线)之间的最短路径?

    bwlabel可用于获取图像中断开连接的对象 L Ne bwlabel image 如何计算两条不连通的闭合曲线之间的最短路径 有实际的 非理论的 解决方案吗 建议1 尝试提取要连接的对象的周边像素的坐标 并将它们用作图形中的节点 然后使用
  • Xamarin iOS 构建的 DevOps CI 错误 在钥匙串中找不到有效的 iOS 代码签名密钥

    我已经为我的 Xamarin iOS 应用程序创建了 YAML 构建配置 并提供了证书文件 p12 和 mobileprovision 但是当管道运行时 它在应用程序的构建步骤中失败 证书安装通过 Note具有相同证书文件和密码的构建在应用
  • Keras 中的回调异常 - Tensorflow 2.0 - Python

    以下代码在与 Keras 打包的 MNIST 数据上运行顺序 Keras 模型 非常简单 在运行以下代码时 我遇到异常 该代码很容易重现 import tensorflow as tf class myCallback tf keras c
  • 有没有办法获取 Visual Studio 使用的构建命令行?

    我想从命令行进行构建 但我想从 Visual Studio 2012 获取确切的命令行语法 这样我就不必手动找出所有标志 导入和其他参数 有没有办法让 Visual Studio 显示这些信息 在 Visual Studio 中生成项目或解
  • 使用 Service Worker 处理离线时的文件上传

    我们有一个 Web 应用程序 使用 AngularJS 构建 我们也逐渐添加 PWA 功能 服务工作线程 可启动项 通知等 我们的网络应用程序的功能之一是能够在离线状态下完成网络表单 目前 我们在离线时将数据存储在 IndexedDB 中
  • Mongoid embeds_many:推送文档而不保存以保留脏状态

    在 Mongoid 中 将文档推送到embeds many关系自动将文档保存到数据库中 通常 这很好 但是当我需要跟踪嵌入文档的更改时 我会遇到问题 假设您有两个模型 class List include Mongoid Document
  • 从函数 React Native 获取字符串结果

    我创建了一个连接到 redux 并返回当前加载的组件item sname 作为导航标题 但是当我尝试从此组件获取标题时 它会出现以下错误 Error title cannot be defined as a function in navi
  • 不支持的major.minor版本51.0(无法加载类org.postgresql.Driver)

    使用maven创建一个Web应用程序并将其部署在heroku上 一切正常 但当我调用使用 postgresql 9 2 1002 jdbc4 驱动程序的操作时 我得到 java lang UnsupportedClassVersionErr
  • Android Studio 3.5 原因:buildOutput.apkData 不得为 null Clean & Rebuild 已尝试

    在我将 Android Studio 3 4 更新到 3 5 并想要构建签名 APK 后 我收到错误 原因 buildOutput apkData 不能为 null 错误 我已经尝试过清理和制作项目以及清理和重建项目 但没有成功 我正在使用
  • 从 iOS 15.0 同步 CloudKit 后,CoreData 中的关系为零

    我正在为一个新应用程序开发 PoC 但我遇到了两个 CoreData 实体的问题InboxItem and CardSet 它们中的每一个都具有可选的 对一 关系 当我在模拟器中启动应用程序并创建这些实体时 模拟器数据库和 CloudKit
  • 如何将对象标记为由 GC(垃圾收集器)进行垃圾收集?

    在Java中 有没有办法markGC 下一次垃圾收集的对象clean up cycle 我听说设置一个对象null不再有效 不 你不能 如果另一个变量引用了它 您会期望发生什么 请注意 您无法设置object为 null 您只能设置一个va
  • 如何将 JsonConverter 与 JToken.ToObject<>() 方法一起使用?

    我正在将一个大型 JSON 文件成功读取到 JObjects 中 我要反序列化的类型之一具有 System Drawing Color 类型的属性 此属性的 JSON 具有表示颜色的整数值 当我尝试执行 ToObject 时 我得到 将值
  • 查找插入特定表的存储过程

    有没有办法找到存储过程在表中创建的条目 举例来说 存储过程A插入表A存储过程 B 插入表 A存储过程 C 插入表 B 我希望查询返回存储过程 A 和存储过程 B 的名称 我现在已经得到了这个 但它所做的只是找到存储过程 我认为这将是查找存储
  • 暂时禁用mysql远程访问

    我需要在 Linux 服务器上的每晚 mysql 维护期间禁用远程访问 以便在此期间没有人可以查询数据库 我无法执行 SERVICE MYSQL STOP 因为那样我就无法执行我需要执行的操作 截断并重建几个表 有没有办法暂时关闭外部访问
  • 如何避免 R Fisher.test 工作区错误

    我正在对大量列联表进行渔夫精确检验 并保存生物信息学问题的 p val 其中一些列联表很大 因此我尽可能地增加了工作空间 但是当我运行以下代码时出现错误 result lt fisher test data workspace 2e9 LD
  • 命令行流网络摄像头,带有来自 Ubuntu 服务器的 WebM 格式的音频

    我正在尝试从连接到无头 Ubuntu 服务器 运行 Maverick 10 10 的网络摄像头传输视频和音频 我希望能够以 WebM 格式 VP8 视频 OGG 进行流式传输 带宽有限 因此流必须低于 1Mbps 我尝试过使用 FFmpeg
  • 获取用户使用discord.py发送的最后一条消息?

    我想知道是否有办法让机器人使用 Python 中的discord py 获取用户在服务器聊天中发送的最后一条消息 多谢 旧答案discord py async 重写前 Use log froms http discordpy readthe
  • Scala 关闭挂钩从未运行?

    scaladoc 为sys addShutdownHook says shutdown hooks are NOT guaranteed to be run 现在这是完全合理的 因为如果您向 JVM 发送 SIGKILL 或任何 Windo
  • 整数数组的ArrayList

    我正在尝试编写一个简单的游戏 其中敌人在网格上追逐玩家 我正在使用维基百科寻路页面上的简单寻路算法 这涉及创建两个列表 每个列表项包含 3 个整数 这是我尝试构建和显示这样一个列表的测试代码 当我运行以下代码时 它会为 ArrayList