Getting incorrect ouput when passing a string variable, defined by user input, to a setter method in Java -


this question has answer here:

new java. understand strings immutable, don't understand why output here way is.

the goal: i'm trying ask user question "what class want be?", user answers. answer stored in string variable (classentered), , passed setclass method returns starting hp , starting gold based on input classentered.

the problem: when user enters kind of character want (i.e. warlock or warrior), playerclass gets updated properly. output (startinghp / startinggold) not respond correctly.

here code:

    class player {          string playername;         string playerclass;         int startinggold;         int startinghp;          public void setname(string playername){             this.playername = playername;         }          public void setclass(string newclass){             playerclass = newclass;             if(playerclass == "warlock"){                 startinghp = 100;                 startinggold = 25;             }else if (playerclass == "warrior"){                 startinghp = 150;                 startinggold = 30;              }         }     }      public class app {          public static void main(string[] args) {              // practice code: if playerclass defined way output correct             player player1 = new player();             player1.setname("jordan");             player1.setclass("warlock");              system.out.println("your name is: " + player1.playername);             system.out.println("you're " + player1.playerclass);             system.out.println("your starting hp " + player1.startinghp + " starting gold " + player1.startinggold);              player player2 = new player();             player2.setname("jorel");             scanner sc = new scanner(system.in);                     system.out.println("what class choose? ");             string classentered = sc.nextline();             player2.setclass(classentered);             system.out.println("testing " + player2.playerclass);             //output incorrect when playerclass defined via scanner             system.out.println("your name is: " + player2.playername);             system.out.println("you're " + player2.playerclass);             system.out.println("your starting hp " + player2.startinghp + " starting gold " + player2.startinggold);         }      } 

strings in java case-sensitive. when player inputs class, must write exactly you're comparing in setclass api.

secondly, must use equals method comparing string contents.

if(playerclass.equals("warlock")) {     startinghp = 100;     startinggold = 25; } else if (playerclass.equals("warrior")) {     startinghp = 150;     startinggold = 30;  } 

in code, code wasn't entering neither branch of if statement.

more:

  • use constants classes, or separate classes/enums.
  • make setters , getters hp , gold. respect encapsulation.
  • make sure tell use class doesn't exist, if enters "elf", example.
  • to make classes case-insensitive, use equalsignorecase compare strings, instead of equals

Comments

Popular posts from this blog

c++ - CryptStringToBinary API behavior -

java.util.scanner - How to read and add only numbers to array from a text file -

iphone - Three second countdown in cocos2d -