Java - Creating Object Arrays -
i can't seem work out these object arrays, i'm attempting create list of player names values stored, each integer , multiple strings each.
this i'm working on far, object arrays correct storage package this? error in line 237 when try add player in class addplayer: player[usercount].setname(name);
the error is:- exception in thread "main" index out of bounds.
import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; import java.util.scanner; public class playerkarma { static scanner input = new scanner(system.in); static private string[] username = {"name1","name2","test","moretesting","fervor","stackoverflow","imported","quaternion","jetstream"}; static private int[] karma = {1000,800,800,5,15,-4,-403,54,11,210}; static private boolean exit = false; static private int maxkarmachange = 10; //how players karma can change per day. static player[] userarray = new player[10000]; //arraylist<player> userarray = new arraylist<player>(); static private int usercount = 0; public static void main(string[] args) { while (!exit) { system.out.println(""); system.out.println("select option"); system.out.println("1: display player's karma"); system.out.println("3: display player names , karma"); system.out.println("5: add player"); string command = input.nextline(); switch(command) { //display player's karma. case "1": { system.out.println("enter player's name: "); string inputstring = input.nextline(); int playerindex = findplayer(inputstring); if (playerindex == -1) { system.out.println("player doesn't exist"); } else //if player exists. { system.out.println(userarray[playerindex].getname() + " has karma of " + karma[userarray[playerindex].getkarma()]); break; } break;} //display player names , karma. case "3": {getallplayerkarma(); sleep(1500); break;} //add player. case "5": { system.out.println("enter player's name:"); string inputstring = input.nextline(); if (usercount > 0) //if there @ least 1 user in database. { int playerindex = findplayer(inputstring); if (playerindex == -1) { addplayer(inputstring,0); } else //if player exists. { break; } } else //if there's no users. { addplayer(inputstring,0); } break;} } } } //class creation players. public class player { public string name; public int karma; //public string[] notes = new string[5]; public string getname() { return name; } public void setname(string name) { this.name = name; } public int getkarma() { return karma; } public void setkarma(int karma) { this.karma = karma; } } private static void getallplayerkarma() { system.out.println(""); (int k = 0; k < usercount; k++) { system.out.println(userarray[k].getname() + " has karma of " + userarray[k].getkarma()); } } private static void setallplayerkarma(string karmavalue) { system.out.println(""); (int k = 0; k < username.length; k++) { int parsekarma = integer.parseint(karmavalue); karma[k] = parsekarma; } system.out.println("all karma has been set " + karmavalue); } private static void addplayer(string name, int karma) { //adds new user player[] player = new player[usercount]; //player[usercount] = new player(usercount); player[usercount].setname(name); player[usercount].setkarma(karma); //userarray[usercount].setname(name); //userarray[usercount].setkarma(karma); usercount++; } //returns index of player in database. private static int findplayer(string playername) { int playerindex = -1; (int j = 0; j < usercount; j++) { system.out.println("testing name: " + playername + " against " + userarray[j].getname()); if (playername.equals(userarray[j].getname())) { playerindex = j; system.out.println("match"); break; } else { //system.out.println("no match"); } } return playerindex; } private static void sleep(int sleep) { try {thread.sleep(sleep);} catch(interruptedexception ex) { thread.currentthread().interrupt();} } }
there 3 problems code:
player[] player = new player[usercount]; player[usercount].setname(name);
firstly, you're creating new array each time - suspect want populate userarray
instead.
secondly, you're creating array of size usercount
, trying use element index usercount
- that's never going work. array indexes 0-based, element length 3 has valid indexes 0, 1 , 2 example.
thirdly, you're not creating new player
object - every element in array null. if fixed index, player[x].setkarma(karma)
throw nullpointerexception
.
i suspect want method this:
private static void addplayer(string name, int karma) { player player = new player(); player.setkarma(karma); player.setname(name); userarray[usercount] = player; usercount++; }
that's fine, until user count exceeds length of array. @ point, should start looking @ list<e>
(and arraylist<e>
in particular).
Comments
Post a Comment