这是我第一次使用 Rust,所以我对它一无所知。我知道将这些提示放在主窗口中并不理想,但我计划也将相同的用户输入用于其他功能。我的目标是创建一个半空半满随机生成的整数的数组。我还需要能够插入、删除或查找该数组中的任何整数。为此,我想提示用户输入一个代表数组大小的整数,然后再次提示他们是否想要在该数组中插入、删除或查找整数。
我遇到的问题是将
f_size
传递给 array_set
函数时。它表示 array_set
参数 size
必须是 const
变量。我做错了什么?
fn main() {
// String to store user's max key value
let mut max_key = String::new();
// Prompt user for max key value
println!("Enter the desire size of your array:");
// Read user input
io::stdin().read_line(&mut max_key).expect("error");
// Turn user input into integer
let f_size: i32 = max_key.trim().parse().expect("not a number");
// Store user's desired command
let mut command = String::new();
// Ask what action they want to perform
println!("Enter insert, remove, or find");
// Read user input
io::stdin().read_line(&mut command).expect("error");
// Call method to fill array with random numbers and perform the action
array_set(f_size, command);
}
fn array_set(size: i32, command: String){
// Random number generator
let mut rng = rand::thread_rng();
// Initialize empty array of user defined size
let mut arr: [i32; size] = [0; size-1];
// Loop through array and insert random values
for i in 0..size/2 {
let num: i32 = rng.gen();
arr.push(num);
}
arr;
}
通过一些小的更改,您的代码即可编译:
Vec
代替数组;数组的大小在编译时是固定的。 Vec
是它们的动态大小版本。usize
而不是 i32
来确定尺寸 - Rust 需要所有尺寸均为 usize
。use rand::Rng;
use std::io;
fn main() {
// String to store user's max key value
let mut max_key = String::new();
// Prompt user for max key value
println!("Enter the desire size of your array:");
// Read user input
io::stdin().read_line(&mut max_key).expect("error");
// Turn user input into integer
let f_size: usize = max_key.trim().parse().expect("not a number");
// Store user's desired command
let mut command = String::new();
// Ask what action they want to perform
println!("Enter insert, remove, or find");
// Read user input
io::stdin().read_line(&mut command).expect("error");
// Call method to fill array with random numbers and perform the action
array_set(f_size, command);
}
fn array_set(size: usize, command: String) {
// Random number generator
let mut rng = rand::thread_rng();
// Initialize empty array of user defined size
let mut arr = vec![0; size];
// Loop through array and insert random values
for i in 0..size / 2 {
let num: i32 = rng.gen();
arr.push(num);
}
arr;
}
代码是否有意义,只要你尝试使用它就知道了。
不过,我已经可以告诉你,除了之前用零初始化它之外,您可能不想一直
.push()
。这不是插入,而是附加。但这当然取决于您的用例。