Java-创建对象数组
我似乎无法计算出这些对象数组,我正在尝试创建一个存储了值的播放器名称列表,每个值都有一个整数和一些多个字符串 这就是我目前正在研究的,对象阵列是否是正确的存储包?当我尝试在类addPlayer:player[userCount].setName(name)中添加播放器时,错误出现在第237行 错误是:-线程“main”索引中的异常超出范围Java-创建对象数组,java,arrays,oop,Java,Arrays,Oop,我似乎无法计算出这些对象数组,我正在尝试创建一个存储了值的播放器名称列表,每个值都有一个整数和一些多个字符串 这就是我目前正在研究的,对象阵列是否是正确的存储包?当我尝试在类addPlayer:player[userCount].setName(name)中添加播放器时,错误出现在第237行 错误是:-线程“main”索引中的异常超出范围 import java.util.ArrayList; import java.util.HashMap; import java.util.List; im
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 much a 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 an option");
System.out.println("1: Display a player's karma");
System.out.println("3: Display all player names and karma");
System.out.println("5: Add player");
String command = input.nextLine();
switch(command)
{
//Display player's karma.
case "1": {
System.out.println("Enter a player's name: ");
String inputString = input.nextLine();
int playerindex = findPlayer(inputString);
if (playerindex == -1)
{
System.out.println("Player doesn't exist");
}
else //If the player exists.
{
System.out.println(userArray[playerindex].getName() + " has a karma of " + karma[userArray[playerindex].getKarma()]);
break;
}
break;}
//Display all player names and karma.
case "3": {getAllPlayerKarma(); sleep(1500); break;}
//Add player.
case "5": {
System.out.println("Enter a player's name:");
String inputString = input.nextLine();
if (userCount > 0) //If there is at least one user in the database.
{
int playerindex = findPlayer(inputString);
if (playerindex == -1)
{
addPlayer(inputString,0);
}
else //If the player exists.
{
break;
}
}
else //If there's no users.
{
addPlayer(inputString,0);
}
break;}
}
}
}
//Class creation for 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("");
for (int k = 0; k < userCount; k++)
{
System.out.println(userArray[k].getName() + " has a karma of " + userArray[k].getKarma());
}
}
private static void setAllPlayerKarma(String karmaValue) {
System.out.println("");
for (int k = 0; k < username.length; k++)
{
int parseKarma = Integer.parseInt(karmaValue);
karma[k] = parseKarma;
}
System.out.println("All karma has been set to " + karmaValue);
}
private static void addPlayer(String name, int karma) {
//Adds a 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 the index of the player in the database.
private static int findPlayer(String playerName) {
int playerIndex = -1;
for (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();}
}
}
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入java.util.Scanner;
公共级玩家卡玛{
静态扫描仪输入=新扫描仪(System.in);
静态私有字符串[]用户名={“name1”、“name2”、“test”、“moretesting”、“fervor”、“stackoverflow”、“imported”、“quaternion”、“jetstream”};
静态私有int[]karma={1000800800,5,15,-4,-403,54,11210};
静态私有布尔退出=false;
静态私有int maxKarmaChange=10;//玩家每天的业力变化量。
静态玩家[]用户数组=新玩家[10000];
//ArrayList userArray=新的ArrayList();
静态私有int userCount=0;
公共静态void main(字符串[]args)
{
当(!退出)
{
System.out.println(“”);
System.out.println(“选择选项”);
System.out.println(“1:显示玩家的业力”);
System.out.println(“3:显示所有玩家名称和业力”);
System.out.println(“5:添加播放器”);
String命令=input.nextLine();
开关(命令)
{
//显示玩家的业力。
案例“1”:{
System.out.println(“输入玩家名称:”);
字符串inputString=input.nextLine();
int playerindex=findPlayer(inputString);
如果(playerindex==-1)
{
System.out.println(“播放器不存在”);
}
else//如果播放机存在。
{
System.out.println(userArray[playerindex].getName()+”的业力为“+karma[userArray[playerindex].getKarma()”;
打破
}
中断;}
//显示所有玩家的名字和业力。
案例“3”:{getAllPlayerKarma();sleep(1500);break;}
//添加玩家。
案例“5”:{
System.out.println(“输入玩家名称:”);
字符串inputString=input.nextLine();
if(userCount>0)//如果数据库中至少有一个用户。
{
int playerindex=findPlayer(inputString);
如果(playerindex==-1)
{
addPlayer(inputString,0);
}
else//如果播放机存在。
{
打破
}
}
否则//如果没有用户。
{
addPlayer(inputString,0);
}
中断;}
}
}
}
//为玩家创建类。
公开课选手
{
公共字符串名称;
公共因果报应;
//公共字符串[]注释=新字符串[5];
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
public int getKarma(){
还业;
}
公共无效业力(内因业力){
这。因果报应=因果报应;
}
}
私有静态void getAllPlayerKarma(){
System.out.println(“”);
for(int k=0;k
您使用值0初始化usercount,因此创建一个大小为0的数组Player[]Player=new Player[usercount]代码>,这将导致错误。此代码有三个问题:
Player[] player = new Player[userCount];
player[userCount].setName(name);
首先,您每次都在创建一个新数组-我怀疑您是想填充userArray
其次,您正在创建一个大小为userCount
的数组,然后尝试使用索引为userCount
的元素-这是行不通的。数组索引是基于0的,因此,例如,长度为3的元素具有有效的索引0、1和2
第三,你没有创建一个新的Player
对象,所以
private static void addPlayer(String name, int karma) {
Player player = new Player();
player.setKarma(karma);
player.setName(name);
userArray[userCount] = player;
userCount++;
}