我有一个字符串数组,字符串中包含数字。我还需要对这些数字执行一系列操作。它们遵循+, - ,*,/的顺序。如果数量超过4,则返回加号。
function calculate(n, operator, b) {
switch (operator) {
case 1:
n += b;
return n;
case 2:
n -= b;
return n;
case 3:
n *= b;
return n;
case 4:
n /= b;
return n;
}
}
numberArray = ["23", "44", "99", "324", "19"]
let n=0;
let c = 1;
for (var i = 0; i < numberArray.length; i++) {
calculate(n, c, parseInt(numberArray[i]));
if ( c < 4) {
c++;
} else {
c=1;
}
}
console.log(n);
&#13;
由于某种原因,switch语句没有正确运行。它没有执行操作并返回n
,所以我可以从计算中得到总数。
答案 0 :(得分:3)
我认为n += b
;在函数中将更新n
的值。
确实如此,但n
不是代码中的n
调用 calculate
。它是n
calculate
的参数。calculate(n, c, parseInt(numbersArray[i]));
是n
的参数。当你这样做时:
calculate
n = calculate(n, c, parseInt(numbersArray[i]));
的值会传递到function calculate(n, operator, b) {
switch (operator) {
case 1:
n += b;
return n;
case 2:
n -= b;
return n;
case 3:
n *= b;
return n;
case 4:
n /= b;
return n;
}
}
numberArray = ["23", "44", "99", "324", "19"]
let n=0;
let c = 1;
for (var i = 0; i < numberArray.length; i++) {
n = calculate(n, c, parseInt(numberArray[i]));
if ( c < 4) {
c++;
} else {
c=1;
}
}
console.log(n);
,而不会引用变量本身。 (这被称为&#34;传递值。&#34; JavaScript总是传递变量的值。)参数就像一个局部变量;更新它在函数外没有任何影响。
只需使用结果:
switch
更新了代码段:
switch (operator) {
case 1:
return n + b;
case 2:
return n - b;
case 3:
return n *= b;
case 4:
return n / b;
}
&#13;
当然,这意味着您的c
可以更简单:
if
只是FWIW,还有一种更新c = (c % 4) + 1;
的聪明方法,以避免 @Override
public void create()
{
float aspectRatio = (float)Gdx.graphics.getWidth() / (float)Gdx.graphics.getHeight();
cam = new OrthographicCamera();
viewport = new FitViewport(MyGdxGame.WIDTH * aspectRatio, MyGdxGame.HEIGHT, cam);
[...]
}
@Override
public void render(SpriteBatch batch)
{
cam.update();
batch.setProjectionMatrix(cam.combined);
batch.begin();
em.render(batch); //render Ship and Asteroids
[...]
}
@Override
public void resize(int width, int height)
{
viewport.update(width, height);
cam.position.set(MyGdxGame.WIDTH / 2, MyGdxGame.HEIGHT /2, 0);
}
:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour());
calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute());
if(calendar.getTimeInMillis() < System.currentTimeMillis())
calendar.add(Calendar.DAY, 1);
那将为你缠身。
答案 1 :(得分:0)
你可以使用一个没有开关结构的更紧凑的版本,但是有一个用于函数的数组。
它与索引一起使用,并且基于零,因此对第一个或最后一个项目没有麻烦,只需使用模数运算符%
获取数组的长度并获得正确的索引。
let array = ["23", "44", "99", "324", "19"],
fn = [(a, b) => a + b, (a, b) => a - b, (a, b) => a * b, (a, b) => a / b],
n = array.reduce((n, a, i) => fn[i % fn.length](n, a), 0);
console.log(n);
&#13;