【问题标题】:Static array length, replacing values静态数组长度,替换值
【发布时间】:2012-02-09 00:48:44
【问题描述】:

我有一个长度为 10 的“双”数组。当我第一次启动该数组时,里面的所有值都是“0.0”,直到我开始替换它们。一旦我将所有值替换为 0 以外的值,我将如何制作它,所以如果我决定向数组“添加”另一个数字,它将从索引 0 的开头重新开始并重新执行该过程,替换旧数字按顺序排列。

从事银行账户交易程序。因此,您有一个包含 10 个事务的数组,所有事务都从 0.0 开始。然后,当您开始取款或存款时,它会将取款/存款的金额“记录”到每个插槽中。一旦你进行了第 11 笔交易,假设返回并替换第一笔交易,第 12 笔交易替换第二笔交易,以此类推。

编辑:不允许使用数组列表。必须是一个普通的静态长度数组。

【问题讨论】:

  • 你能提供一个你正在尝试做什么的例子吗?我发现目前的解释不太清楚。
  • 处理银行账户交易程序。因此,您有一个包含 10 个事务的数组,所有事务都从 0.0 开始。然后,当您开始取款或存款时,它会将取款/存款的金额“记录”到每个插槽中。一旦您进行了第 11 笔交易,假设返回并替换第一笔交易,第 12 笔交易替换第二笔交易,以此类推。

标签: java arrays replace


【解决方案1】:

这是一个简单的模数问题。数学解决方案如下所示

 Wrap = currentArrayPos % arrayLength - 1 //need this since arrays start at 0 and length starts counting at 1.
 If Wrap == 1 --> currentArrayPos = 0
 Else --> currentArrayPos = currentArrayPos + 1

当您替换值时,您将迭代到下一个数组位置并替换该值。当您替换了数组中的最后一个值时,模数会告诉您循环回到前面并替换第一个值。

简单的 Java 解决方案是:

for(int i = 0; i < array.length; i++) { 
//logic for calculating new values and exit condition goes here. 
    array[i] = newValue
    if(i ==> array.length - 1)
        i = 0 //resets the loop to keep going

    if(exitCondition) 
        break; //if there's some criteria, get out.  }

如果它不是一个不断重复发生的事情,那么您只需跟踪您在数组中替换的最后一个位置,并进行取模操作以确定您是否需要重置。

mre 关于使用列表的建议也值得研究,但您需要跟踪位置。

【讨论】:

    【解决方案2】:

    如果“i”是您每次写入后递增的数组索引,那么当您到达数组边缘时,一种简单的环绕数组的方法是使用模运算符:

    int index = 0;
    int arraySize = 10;
    long[] data = new long[arraySize];
    
    for (int i=0; i<100; i++) {
        data[ index++ % arraySize ] = i; // or some other value
    }
    

    这样,您的数组将以循环方式填充,总是在到达数组边界后再次从索引 0 开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 2017-08-27
      相关资源
      最近更新 更多