Java 如何在给定值的情况下填充二维数组
我试图将一个类中的值输入到另一个类中声明的2d数组中 当我运行它的时候,我总是得到一个空指针异常,所以我觉得我正在尝试的方式没有很好地工作 它的工作方式主要是嵌套循环将值提供给另一个方法,然后该方法将值输入到2d数组中 谢谢 这是主要的Java 如何在给定值的情况下填充二维数组,java,arrays,Java,Arrays,我试图将一个类中的值输入到另一个类中声明的2d数组中 当我运行它的时候,我总是得到一个空指针异常,所以我觉得我正在尝试的方式没有很好地工作 它的工作方式主要是嵌套循环将值提供给另一个方法,然后该方法将值输入到2d数组中 谢谢 这是主要的 public class Lab1 { static final int NBPLAYERS = 11; static final int NBMONTHS = 6; public static void main(String[] args) {
public class Lab1 {
static final int NBPLAYERS = 11;
static final int NBMONTHS = 6;
public static void main(String[] args) {
String[] month = {"April", "May","June", "July", "August","September"};
String[] players = {"Colabello","Donaldson","Smoak","Martin","Goins","Encarnacion","Carrera","Tulowitzki","Pillar","Bautista","Travis"};
double[][] battingAvg = {
{0,.368,.300,.224,.386,.268},
{.319,.306,.269,.287,.324,.296},
{.229,.310,.213,.191,.203,.262},
{.197,.327,.239,.256,.138,.213},
{.276,.236,.172,.240,.314,.279},
{.205,.225,.303,.241,.407,.279},
{0,.302,.282,.244,.333,.231},
{0,0,0,.357,.214,.237},
{.273,.181,365,.283,.240,.323},
{.164,.295,.226,.219,.286,.293},
{.325,.189,.313,.368,0,0}};
double [][] onBase = {
{.417,.330,.286,.413,.362,.429},
{.370,.373,.322,.370,.408,.403},
{.372,.333,.275,.283,.243,.324},
{.367,.362,.329,.322,.263,.300},
{.323,.278,.221,.286,.442,.347},
{.258,.333,.382,.384,.460,.411},
{0,.357,.333,.277,.333,.313},
{0,0,0,.400,.325,.250},
{.297,.237,.380,.323,.283,.363},
{.325,.418,.388,.300,.370,.436},
{.393,.246,.313,.421,0,0}};
PlayerStats player;
BlueJays team = new BlueJays(NBPLAYERS, NBMONTHS);
for(int iPlayer=0; iPlayer<NBPLAYERS; iPlayer++) {
for(int iMonth=0; iMonth<NBMONTHS; iMonth++) {
player = new PlayerStats(players[iPlayer], iMonth, battingAvg[iPlayer][iMonth],onBase[iPlayer][iMonth]);
team.setPlayerStatsCell(player,iPlayer,iMonth);
}
}
team.getHighestSingleMonthBattingAvg();
team.getHighestOnBase(5);
team.getLowestBattingAvg(5);
team.getBestMonth("Bautista");
team.getBestOverallRecord();
team.getLowestOnBase();
只是简单地看一下。在某些函数中递增之前,永远不会将类变量“j”重置为0。在某些函数中,“j”的值可能超出索引范围吗?发布(通过使用添加到问题中)您得到的确切异常,包括完整堆栈跟踪。如果您的
main
方法甚至不调用BlueJays#gethighestsinglemonthbatingavg()
,您的异常怎么可能来自main
方法?请检查您提供给我们的main方法副本是否完整。@rslemos我声明了一个BlueJays对象团队。@impact\u Sv您仍然没有调用您展示给我们的main
片段中的getHighestSingleMonthBattingAvg
。请仔细检查你的帖子;特别是main
方法。当然还有更多,但你没有发布。@rslemos哦,我的权利,我更新了它。我的错。试过了,还是得到了空指针。
PlayerStats setPlayerStatsCell(PlayerStats p, int nbPlayers, int nmMonths) {
for(int i=0; i<nbPlayers; i++) {
for(int j=0; j<nmMonths; j++) {
stats[i][j]= p;
}
}
return p;
}
class BlueJays {
int nbPlayers;
int nbMonths;
int j = 0;
int highestBattingAvg;
int highestBattingMonth;
String highestBattingPlayer;
int highestOnBase;
int lowestAvg;
String lowestAvgPlayer;
int highestOverall;
String highestOverallPlayer;
int lowestOnBase;
int lowestOnBaseMonth;
String highestOnBasePlayer;
double bestOverAllMonth;
PlayerStats[][] stats;
public BlueJays(int nbplayers2, int nbmonths2) {
this.nbPlayers = nbplayers2;
this.nbMonths = nbmonths2;
this.stats = new PlayerStats[nbPlayers][nbMonths];
}
PlayerStats setPlayerStatsCell(PlayerStats p, int nbPlayers, int nmMonths) {
for(int i=0; i<nbPlayers; i++) {
for(int j=0; j<nmMonths; j++) {
stats[i][j]= p;
}
}
return p;
}
PlayerStats getHighestSingleMonthBattingAvg() {
for(int i = 0; i < nbPlayers; i++) {
for(int j = 0; j<nbMonths; j++) {
stats[i][j].getAvg();
if(highestBattingAvg < stats[i][j].getAvg()) {
highestBattingMonth = stats[i][j].getMonth();
highestBattingPlayer = stats[i][j].getName();
}
System.out.println("Highest average batting player for the month " + highestBattingMonth + " is " + highestBattingPlayer);
}
}
return null;
}
PlayerStats getHighestOnBase(int month) {
while(j < nbMonths) {
for(int i = 0; i < nbPlayers; i++) {
stats[i][month].getOnBase();
if(highestOnBase < stats[i][month].getOnBase()) {
highestOnBasePlayer = stats[i][month].getName();
}
if (i == nbMonths) {
j++;
i = 0;
}
System.out.println("Highest average onBase player for the month " + month + highestOnBasePlayer);
}
}
return null;
}
public PlayerStats getLowestBattingAvg(int month) {
while(j < nbMonths) {
for(int i = 0; i < nbPlayers; i++) {
stats[i][month].getOnBase();
if(lowestAvg > stats[i][month].getAvg()) {
lowestAvgPlayer = stats[i][month].getName();
}
if (i == nbMonths) {
j++;
i = 0;
}
}
System.out.println("Lowest average batting player for the month " + month + " is " + lowestAvgPlayer);
}
return null;
}
PlayerStats getBestMonth(String player) {
while(j < nbMonths) {
for(int i = 0; i < nbPlayers; i++) {
stats[i][j].getBoth();
if(bestOverAllMonth > stats[i][j].getAvg() && stats[i][j].getName().contains(player)) {
bestOverAllMonth = stats[i][j].getBoth();
}
if (i == nbMonths) {
j++;
i = 0;
}
}
System.out.println("Best month for the player " + player + " is " + bestOverAllMonth);
}
return null;
}
public String getBestOverallRecord() {
while(j < nbMonths) {
for(int i = 0; i < nbPlayers; i++) {
stats[i][j].getBoth();
if(highestOverall < stats[i][j].getBoth()) {
highestOverallPlayer = stats[i][j].getName();
}
if (i == nbMonths) {
j++;
i = 0;
}
}
System.out.println("Highest overall record is " + highestOverallPlayer);
}
return null;
}
public PlayerStats getLowestOnBase() {
while(j < nbMonths) {
for(int i = 0; i < nbPlayers; i++) {
stats[i][j].getOnBase();
if(lowestOnBase > stats[i][j].getOnBase()) {
double lowestOnBase = stats[i][j].getOnBase();
if(lowestOnBase > 0) {
lowestAvgPlayer = stats[i][j].getName();
} else {
i++;
}
if (i == nbMonths) {
j++;
i = 0;
}
}
}
System.out.println("Lowest On Base is " + lowestOnBase);
}
return null;
}
}
Exception in thread "main" java.lang.NullPointerException
at BlueJays.getHighestSingleMonthBattingAvg(BlueJays.java:52)
at Lab1.main(JonathanRoy_Lab1.java:52)