2 回答
TA贡献1794条经验 获得超7个赞
尝试这个
int bars = 2;
int beats = 4;
int[] pattern = new int[bars * beats];
for (int i = 0; i < pattern.length; i++) {
if(i % beats < bars ){
pattern[i] = 1;
} else {
pattern[i] = 0;
}
}
TA贡献1842条经验 获得超21个赞
这是实现此目标的众多方法之一。我们遍历数组,按定义的间隔递增,例如您希望为 2。我们创建另一个 for 循环,从当前索引开始到当前索引 + 间隔结束,这将允许我们将值(在您的情况下为 1)分配给这些索引。我们还检查我们正在循环的当前索引是否大于数据长度 - 1,以确保对于非偶数数组大小,没有数组索引超出绑定。
public class ChangeArrayNSteps {
public static void main(String[] args) {
ChangeArrayNSteps cans = new ChangeArrayNSteps(8);
cans.step(2, 1);
System.out.println("Data: " + Arrays.toString(cans.data));
}
private final int[] data;
public ChangeArrayNSteps(int size) {
this.data = new int[size];
}
public void step(int interval, int value) {
for (int index = 0; index < data.length; index += interval) {
for (int stepIndex = index; stepIndex < index + interval; stepIndex++) {
if (stepIndex > data.length - 1) {
return;
}
data[stepIndex] = value;
}
index += interval;
}
}
}
输出: Data: [1, 1, 0, 0, 1, 1, 0, 0]
添加回答
举报