Getting incorrect ouput when passing a string variable, defined by user input, to a setter method in Java -
this question has answer here:
- how compare strings in java? 23 answers
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
equalsignorecasecompare strings, instead ofequals
Comments
Post a Comment