0

Computer Engineering Student here! I'm currently building a checker game, and in a particular part of the code I have to choose between two methods that result in the same function.

I could either use if statements or a for loop.

In the for loop, I'd have to loop all 64 checker grid to locate the piece that I want, but through an algorithm, I could find that specific piece using an if statement.

But here's the catch, the if statements take up more lines to code while the loop takes only a few lines. Which is more memory efficient method in this case?

My idea is that the if statements are more efficient although they take up more line since the loop has to literally loop 64 times despite taking up very few lines of code.

Am I right? If I am wrong, have at the keyboard Sirs and Ma'ams!

`for(int i=0;i<size*size;i++) { //Capturing brown piece with white piece if( lastPositionOrigin.PieceName.equals("empty")&&lastClicked.PieceName.equals("white")&&dama[i].PieceName.equals("brown") &&(dama[i].x_position==(lastPositionOrigin.x_position+1)||dama[i].x_position==(lastPositionOrigin.x_position-1)) &&(dama[i].y_position==(lastPositionOrigin.y_position+1)||dama[i].y_position==(lastPositionOrigin.y_position-1)) &&(dama[i].x_position==(lastClicked.x_position+1)||dama[i].x_position==(lastClicked.x_position-1)) &&(dama[i].y_position==(lastClicked.y_position+1)||dama[i].y_position==(lastClicked.y_position-1))){

                dama[i].content.setIcon(null);
                dama[i].PieceName="empty";

                countBrown++;
            }       
            
        }
        
        //-----------------------------------------------------------------
        //Versus
        //-----------------------------------------------------------------

    
        
            if( //Landing on upper left corner when capturing with white
                (int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position-(size+1))>=0
                &&dama[(int)((lastClicked.y_position*size)+lastClicked.x_position)].PieceName.equals("white")
                &&dama[(int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position-(size+1))].PieceName.equals("brown")
                &&(lastPositionOrigin.x_position==(lastClicked.x_position+2)
                &&lastPositionOrigin.y_position==(lastClicked.y_position+2))
                    ) {
            
                    dama[(int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position-(size+1))].content.setIcon(null);
                    dama[(int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position-(size+1))].PieceName="empty";
                    countBrown++;
                    System.out.println("It enters here upper left corner");

            }
            
            if( //Landing on lower left corner when capturing with white
                (int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position+(size-1))<=63
                &&dama[(int)((lastClicked.y_position*size)+lastClicked.x_position)].PieceName.equals("white")
                &&dama[(int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position+(size-1))].PieceName.equals("brown")
                &&(lastPositionOrigin.x_position==(lastClicked.x_position+2)
                &&lastPositionOrigin.y_position==(lastClicked.y_position-2) )
                    ) {
                    
                    dama[(int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position+(size-1))].content.setIcon(null);
                    dama[(int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position+(size-1))].PieceName="empty";
                    countBrown++;
                    System.out.println("It enters here lower left corner");
            }
            if( //Landing on upper right corner when capturing with white
                (int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position-(size-1))>=0
                &&dama[(int)((lastClicked.y_position*size)+lastClicked.x_position)].PieceName.equals("white")
                &&dama[(int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position-(size-1))].PieceName.equals("brown")
                &&(lastPositionOrigin.x_position==(lastClicked.x_position-2)
                &&lastPositionOrigin.y_position==(lastClicked.y_position+2) )
                    ) {
                    
                    dama[(int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position-(size-1))].content.setIcon(null);
                    dama[(int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position-(size-1))].PieceName="empty";
                    countBrown++;
                    System.out.println("It enters here upper right corner");
            }
            
            if( //Landing on lower right corner when capturing with white
                (int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position+(2*(size+1)))<=63
                &&dama[(int)((lastClicked.y_position*size)+lastClicked.x_position)].PieceName.equals("white")
                &&dama[(int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position+(size+1))].PieceName.equals("brown")
                &&(lastPositionOrigin.x_position==(lastClicked.x_position-2)
                &&lastPositionOrigin.y_position==(lastClicked.y_position-2) )
                    ) {
                        
                    dama[(int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position+(size+1))].content.setIcon(null);
                    dama[(int)((lastPositionOrigin.y_position*size)+lastPositionOrigin.x_position+(size+1))].PieceName="empty";
                    countBrown++;
                    System.out.println("It enters here lower right corner");
            }`
  • 1
    I think you should add either actual code or pseudocode showing what you mean. A priori I'd say use a for loop, since they are more readable, hence maintainable, and the difference in efficiency (if any) should be negligible. Also if in doubt and trying to learn more in depth try to analyze the generated code (if applicable), i.e. bytecode or msil. Also see: https://stackoverflow.com/questions/33696028/what-is-faster-a-loop-or-multiple-if-condition – Enrique Castaneda May 26 '21 at 02:29
  • Thanks, I think I could post the whole code but then again I'm tired because of coding this whole game for four days straight and I still have many bugs to fix so I'd rather not show my code XD, your a priori answer is good enough for me. THANK YOU. – Rommel Bagasina May 26 '21 at 02:50
  • On second thought, I'm adding the code hehehe – Rommel Bagasina May 26 '21 at 03:27
  • Yeah, i'm still new here so i don't know why my code won't fit in the code editor something. So please bear with the format above. Basically that's it. I'm only showing the code that allows the white piece to capture brown piece. also i'm coding in java. @EnriqueCastaneda – Rommel Bagasina May 26 '21 at 03:32

0 Answers0