java 二维数组 列操作_关于java:迭代二维数组,每行或每列的正确方法是什么?...

在大学里,我和几个朋友一起做了一个游戏,我们必须从一个.txt文件中加载级别,将其保存为我们选择的数据格式,并明显地显示在屏幕上。我们决定使用一个二维char数组,当我在编程级别解析器时,这个数组逐行填充。为了使它更具描述性,我使用的代码摘录如下:

unconverted ="#####

" +"#___#

" +"#S>X#

" +"#___#

" +"#####" // sample data

while(z < unconverted.length())

{

current = unconverted.charAt(z);

if(current == 'S' || current == 'X' || current == '' || current == '^' || current == '_' || current == '#' ||current == 't')

{

level[x][y] = current;

x++;

}

else if (current =='

')

{

x=0;

y++;

}

else

{

System.out.println("Level null because of an unrecognised character");

level = null;

return level;

}

z++;

}

到目前为止一切都很好,但我们并没有预料到会有什么问题出现。其他人除了知道他们会得到一个字符[],这似乎是足够的信息…但事实并非如此!出现的问题是,在游戏逻辑和图形用户界面的不同点上,数组是每行或每列读取的,这意味着,例如,级别的显示是在它的头上打开的。

这显然花费了我们大量的时间来修复代码,使其再次保持一致。因此,对于未来,我希望得到一些关于什么是公认的"正确"方法的建议,如果有的话:按行或按列填充和访问二维数组?此外,这两种方法的性能有什么不同吗?我的常识是先填充第二维度

非常感谢!

我假设这是Java?

是的,是的。但它是一个独立于编程语言的一般问题。代码只是为了让我的问题更容易理解。

好吧,这是有道理的。你介意公布一些样本数据吗?

简介:这就是二维数组在内存中的布局方式。

所以cache efficeint方法是迭代最后一个索引,同时保持第一个索引相同。这对于大型原始类型的数组(例如在数字算法中)可能是有意义的。

我想在你的情况下不会有什么不同。用最合乎逻辑的方式。

没有"正确"的方法。任何一个都可以是最好的,这取决于上下文。

想想二叉树。哪一种方式是"正确的":广度优先,深度优先,还是其他方式?(提示:这取决于上下文。)

下面是另一个例子:您可以这样想数据库中的关系表:每行都是一个表示实体的元组。但是一些人,比如MichaelStonebreaker,认为基于列的表示在特定的上下文中是有利的。

还有一个问题:如果你有一个m行n列的矩阵,哪种方法更好地填充它?(提示:这并不重要。)当您进行LU分解时,通常是通过遍历行来完成的。找到轴,将该行中的所有条目除以轴,然后消除轴下的所有行。在这种情况下,按行工作是有意义的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值