反向数组C ++?我究竟做错了什么?

时间:2016-10-10 06:41:17

标签: c++

var trackRight = 0;
var trackLeft = 1;
var x = 570;
var y = 255; //no collision past here
var srcX;
var srcY;
var speed = 25;

var character = new Image();
character.src = "ptera_purple.png";

function updateFrame() {
    curFrame = ++curFrame % frameCount;
    srcX = curFrame * width;
    ctx.clearRect(0, 0, canvas.width, canvas.height, x, y, width, height);


    if (left && x > 0) {
        srcY = trackLeft * height; //important for sprite direction
        x -= speed;
    }

    if (right && x < canvasWidth - width) {
        srcY = trackRight * height;
        x += speed;
    }
}

var right = false;
var left = false;

document.addEventListener("keydown", keyDownHandler, false);
document.addEventListener("keyup", keyUpHandler, false);

function keyDownHandler(e) {
    if (e.keyCode == 39) {
        right = true;
    } else if (e.keyCode == 37) {
        left = true;
    }
}

function keyUpHandler(e) {
    if (e.keyCode == 39) {
        right = false;
    } else if (e.keyCode == 37) {
        left = false;
    }
}

function moveLeft() { // keyboard controls
    left = true;
    right = false;
}

function moveRight() {
    left = false;
    right = true;
}

我做错了什么?我觉得我在正确的轨道上,但我不确定什么是错的,这是黑客级别的阵列DS问题。不幸的是,我认为他们没有透露答案。

5 个答案:

答案 0 :(得分:1)

将条件更改为i >= 0n - 1 >= 0可能会导致无限循环。但它是否成功并不重要,因为在这两种情况下,它都不会产生所需的结果。

for(int i = n-1; i >= 0; i--){
   std::cout << " "<< arr[i] << " ";
}

或使用,std::reverse

std::reverse(arr.begin(), arr.end());
for (int i = 0; i < n; i++){
    std::cout << arr[i] << " ";
}

请参阅第二种方法live here

答案 1 :(得分:0)

for(int i = n-1; n-1 >= 0; i--){
   cout << " "<< arr[i] << " ";
}

如果n <= 0,则不会减少n,从而导致无限循环。

答案 2 :(得分:0)

不要重新发明轮子,标准库会在这里帮助你。
使用std::reverse

int main()
{
    std::vector<int> vec;
    int n = 0;
    int temp = 0;

    std::cin >> n;
    for (int i = 0; i != n; ++i) {
        std::cin >> temp;
        vec.emplace_back(temp);
    }

    std::reverse(std::begin(vec), std::end(vec));
}

答案 3 :(得分:0)

在这两种情况下,您已根据需要初始化变量i = 0并递增(在第一个循环中)/递减(在第二个循环中)。 但是,在第二个循环中,你已经将条件置于n,尽管事实上你永远不会改变n的值。这将导致无限循环,因为n-1在整个程序中保持不变。 要对此进行排序,您应该将条件更改为i-1> 0,如下面的代码所示。

for(int i = n-1; i-1 >= 0; i--)
{
   cout << " "<< arr[i] << " ";
}

如果这有帮助,请做好投票。欢呼。

答案 4 :(得分:0)

for(int i = n-1; n-1 >= 0; i--)

在这里,您对for循环的条件有误。您已将n-1分配给i,并且在您使用i--的减量部分中,因此您应该在应该停止循环时使用条件,或者使用i的值for(int i = n-1; i >= 0; i--) 循环将停止。所以,只需改变条件如下:

spring.cloud.config.discovery.enabled=true