Rust阵列无法按预期运行(AoC2019)

时间:2019-12-02 06:28:47

标签: arrays rust

我正在尝试通过挑战代码出现来学习Rust,但我在处理数组时遇到了困难。我正在尝试创建具有特定值[1,1,1,4,99,5,6,0,99]和的数组t:

1)取数组的第一个值(t [0]),如果t [0]是1,我在做加法,如果t [0]是2,我在做乘法。对于这些值,由于第一个数字为1,所以我要做加法。

2)然后,我应该将t [1] + t [2](在这种情况下为2)加进去,并将其存储在数组中的值存储在t [3]中,所以t [t [ 3]]或t [4]。所以t [4]现在应该读为2,而不是99。(对不起,我知道这听起来很令人困惑。)

到目前为止,我只是想使这个附加部分起作用,这是我的代码

fn main() {
    let mut t: [u64; 9] = [1,1,1,4,99,5,6,0,99];
    //ignore all of these let a: u64 = 0;
    //let b: u64 = 1;
    //let c: u64 = 2;
    //let d: u64 = 3;
    decide(&t[0 .. 3]);
    println!("Position 0 is {}", t[0]);
}


fn decide(v: &[u64]){
    if v[0] == 1 {
        addition(&v[1 .. 3]);
    } else if v[0] == 2 {
        multiplication();
    } else if v[0] == 99 {
        println!("Problem succesfully completed!");
        println!("Position 0 is {}", t[0]);
    } else {
        println!("Something went wrong!");
    }
}

fn addition(a: &[u64]){
    a[1] + a[2] = a[a[3]];

}

fn multiplication(){

}

1 个答案:

答案 0 :(得分:0)

我将不提供完整答案,并将提供一些提示。

  • 您尝试写入借用为不可变的数组(默认情况下所有内容都是不可变的),您需要借用可变的借项。
  • 第二,如果要更改数组中的值,则需要执行以下操作:

    a [3] = a [1] + a [2]; //代替a [1] + a [2] = a [3];

    // a [1] + a [2] = a [3];该语句试图为临时变量

  • 赋值
  • 如何在索引时确保不超出数组范围(要传递完整的数组或其他任何选项)

  • 最后,有一个错字。我想您打算说的是v[0]而不是t[0]