mardi 15 août 2017

Java == comparison not returning correct value

package tictactoe;
import java.util.*;

public class tictactoe {
static Map<String,String> board =  initstartboard();
public static void main(String[] args) 
{

    // Put elements to the map
    System.out.printf("1|2|3");
    System.out.printf("\n=====");
    System.out.printf("\n4|5|6");
    System.out.printf("\n=====");
    System.out.printf("\n7|8|9");
    System.out.printf("\nEnter number where to place marker");
    System.out.println("\n============================================");
    System.out.printf("\n");
    boolean xturn = true;
    boolean gamenotwon = true;
    Scanner reader = new Scanner(System.in);
    while (gamenotwon)
    {   

        printboard();

        System.out.println((board.get("1")+board.get("2")+board.get("3") == "XXX" ));
        System.out.println(board.get("1")+board.get("2")+board.get("3"));
        if((isWon())!="sp") { gamenotwon = !gamenotwon; System.out.println(isWon()); break;}
        // sp stands for still playing
        if (xturn) 
        {   boolean played = false;
            while (!played)
            {
                System.out.println("Your turn x: ");
                String s = reader.next();
                String though = board.get(s);

                boolean attemptf = though== null;
                if (attemptf) { System.out.println("What you entered is not a place on the board");}
                boolean fattempt = though == " ";
                if ((!fattempt)) {System.out.println("Marker already placed");}
                if ((!attemptf)&&(fattempt)) {board.put(s,"X"); played = true; xturn = !xturn;}

            }   
        }

        else 
        {   boolean played = false;
        while (!played)
        {
            System.out.println("Your turn o: ");
            String s = reader.next();
            String though = board.get(s);

            boolean attemptf = though== null;
            if (attemptf) { System.out.println("What you entered is not a place on the board");}
            boolean fattempt = though == " ";
            if ((!fattempt)) {System.out.println("Marker already placed");}
            if ((!attemptf)&&(fattempt)) {board.put(s,"O"); played = true; xturn = !xturn;}

        }   
    }

    }


}
public static Map<String,String> initstartboard() {
    Map map = new HashMap();
    map.put("0"," ");
    map.put("1"," ");
    map.put("2"," ");
    map.put("3"," ");
    map.put("4"," ");
    map.put("5"," ");
    map.put("6"," ");
    map.put("7"," ");
    map.put("8"," ");
    map.put("9"," ");
    return map;

}
public static void printboard() 
{
    System.out.printf("\n%s|%s|%s\n=====", board.get("1"),board.get("2"),board.get("3"));
    System.out.printf("\n%s|%s|%s\n=====", board.get("4"),board.get("5"),board.get("6"));
    System.out.printf("\n%s|%s|%s\n", board.get("7"),board.get("8"),board.get("9"));

}
public static void print(Object x) {System.out.println(x);}
public static String isWon()
{   String drawornot = (board.get("1")+board.get("2")+board.get("3")+board.get("4")+board.get("5")+board.get("6")+board.get("7")+board.get("8")+board.get("9"));

    //print((CS(drawornot)));

    //{
    //  return "";
    //}
    if (CS(drawornot))  
    {   
        if((board.get("1")+board.get("2")+board.get("3")) == "XXX" )
        {
            return "X won";
        }

        else if((board.get("1")+board.get("2")+board.get("3")) == "OOO") 
        {
            return "O won";
        }
        else if((board.get("4")+board.get("5")+board.get("6")) == "XXX" )
        {
            return "X won";
        }

        else if((board.get("4")+board.get("5")+board.get("6")) == "OOO") 
        {
            return "O won";
        }
        else if((board.get("7")+board.get("8")+board.get("9")) == "XXX" )
        {
            return "X won";
        }

        else if((board.get("7")+board.get("8")+board.get("9") == "OOO")) 
        {
            return "O won";
        }
        else if(board.get("1")+board.get("4")+board.get("7") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("1")+board.get("4")+board.get("7") == "OOO") 
        {
            return "O won";
        }
        else if(board.get("2")+board.get("5")+board.get("8") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("2")+board.get("5")+board.get("8") == "OOO") 
        {
            return "O won";
        }
        else if(board.get("3")+board.get("6")+board.get("9") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("3")+board.get("6")+board.get("9") == "OOO") 
        {
            return "O won";
        }
        else if(board.get("1")+board.get("5")+board.get("9") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("1")+board.get("5")+board.get("9") == "OOO") 
        {
            return "O won";
        }
        else if(board.get("3")+board.get("5")+board.get("7") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("3")+board.get("5")+board.get("7") == "OOO") 
        {
            return "O won";
        }
        else {System.out.println((board.get("1")+board.get("2")+board.get("3") == "XXX" ));return "sp";}
    }
    else //if (!CS(drawornot)) 
    {
        if(board.get("1")+board.get("2")+board.get("3") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("1")+board.get("2")+board.get("3") == "OOO") 
        {
            return "O won";
        }
        else if(board.get("4")+board.get("5")+board.get("6") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("4")+board.get("5")+board.get("6") == "OOO") 
        {
            return "O won";
        }
        else if(board.get("7")+board.get("8")+board.get("9") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("7")+board.get("8")+board.get("9") == "OOO") 
        {
            return "O won";
        }
        else if(board.get("1")+board.get("4")+board.get("7") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("1")+board.get("4")+board.get("7") == "OOO") 
        {
            return "O won";
        }
        else if(board.get("2")+board.get("5")+board.get("8") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("2")+board.get("5")+board.get("8") == "OOO") 
        {
            return "O won";
        }
        else if(board.get("3")+board.get("6")+board.get("9") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("3")+board.get("6")+board.get("9") == "OOO") 
        {
            return "O won";
        }
        else if(board.get("1")+board.get("5")+board.get("9") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("1")+board.get("5")+board.get("9") == "OOO") 
        {
            return "O won";
        }
        else if(board.get("3")+board.get("5")+board.get("7") == "XXX" )
        {
            return "X won";
        }

        else if(board.get("3")+board.get("5")+board.get("7") == "OOO") 
        {
            return "O won";
        }
        else {return "draw";}
    }



}
public static boolean CS(final String testCode){
    if(testCode != null){
        for(int i = 0; i < testCode.length(); i++){
            if(Character.isWhitespace(testCode.charAt(i))){
                return true; // functions checks wether or not string has whitespace
            }
        }
    }
    return false;
}


}

So im new to Java. I'm starting off with a simple command line tic tac toe game. SO i basically hard coded the function that checks wether or not a player has won. I do this by making alot of if statements. The problem is... Even if i DO HAPPEN to win, Java still doesnt recognize that the string "XXX" (which represents x has won) is equal to "XXX". there is a part of my code where i write

System.out.println((board.get("1")+board.get("2")+board.get("3") == "XXX" ));

System.out.println(board.get("1")+board.get("2")+board.get("3"));

The first line of code prints out false the second line prints out... and you guessed it... XXX. I dont get how java contradicts itself. My question is: How do i fix this?. Thanks in advance and comment below if you need clarification. :D

Aucun commentaire:

Enregistrer un commentaire