Member 13110105 Ответов: 1

Получаю ошибку! ! ! ! !


это дает мне эту ошибку, и я не знаю, как ее исправить:
Exception in thread "main" java.lang.NullPointerException
	at Testing.main(Testing.java:61)


Что я уже пробовал:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Testing 
{
	public static void main(String args[]) 
	   {
	      
		 List<String> teams = new ArrayList<String>();
		 // List<String> ghosts = new ArrayList<String>();
		 // HashMap<String, List<Integer>> map = new HashMap<String, List<Integer>>();
		  String ghoststr;
		      
		  teams.add("A");
		  teams.add("B");
		  teams.add("C");
		  teams.add("D");
		  teams.add("E");
		  
		  
		  int ghost = teams.size() % 2;
		  
		  ghoststr = "GHOST";
		  if (ghost == 1 ) 
		  {
			  
			  teams.add(ghoststr);
			  //ghosts.add("GHOST");
		  }
		  
		 //teams.add("G");
		  //teams.add("F");
		  
		  
		int totalRounds = teams.size()-1;
		int matchesPerRound = teams.size()/2;
		Game[][] rounds = new Game[totalRounds][matchesPerRound];
		//String ght = teams.get(teams.size()-1);
		
		
		for (int round = 0; round< totalRounds; round++)
		{
				
			
			for (int match = 0; match < matchesPerRound; match++) 
			{
				int home = (round + match) % (teams.size() - 1);
	            int away = (teams.size() - 1 - match + round) % (teams.size() - 1);
	            String team1 = teams.get(home);
		        String team2 = teams.get(away);
		        
	            if (match == 0)
	            {
	            	away = teams.size()-1;
	            	
	            }
	            
	            
	            	//if ( team1 != team2)
	             rounds[round][match].team1= team1; 
	             rounds[round][match].team2 = team2;
		       //rounds[round][match] = Game.team1 + " v " + team2 ;		
	            	
	            	
	            
	            
			}
		}
		
		
		
		 for (int i = 0; i < rounds.length; i++) {
			 for(int j = 0; j < rounds.length ; j++)
			 {
				 System.out.println("Round " + (i + 1));
				 if ( !(rounds[i][j].team1.equals(ghoststr) || rounds[i][j].team2.equals(ghoststr)) )
		         {
					String printstr = rounds[i][j].team1 + "V" + rounds[i][j].team2;
					System.out.println(printstr);
					System.out.println();
		         }
				
				 
			 }
	         
	     }

				
				}

}
class Game 
{
	String team1;
	String team2;
}

CHill60

Является ли строка, дающая ошибку rounds[round][match].team1= team1;?

Member 13110105

да

CHill60

Тогда я подозреваю, что вы не установили rounds[round][match] для экземпляра объекта Games.
Я подозреваю, что вам нужна линия, похожая на rounds[round][match] = new Game;

Member 13110105

Спасибо но теперь оператор if в приведенном ниже коде дает мне проблему:

for (int i = 0; i < rounds.длина; i++) {
для (int j = 0; j < раундов.длина ; j++)
{
Системы.из.код println("круглый" + (я + 1));
если ( !(круги[я][Дж].КОМАНДА1.равно(ghoststr) || патронов[я][Дж].команда2.равно(ghoststr)) )
{
Строки printstr = раунда[я][Дж].КОМАНДА1 + "в" + круги[я][Дж].команда2;
Системы.из.код println(printstr);
Системы.из.код println();
}


}

}

ошибка заключается в следующем :

Ява.яз.ArrayIndexOutOfBoundsException: 3
в тестирование.основной(тестирование.Ява:78)

CHill60

Судя по звуку, вы сбежали с конца массива. Отладьте и проверьте значения i,j и раундов.длина

Member 13110105

есть ли способ это исправить? если да, то как?

CHill60

Убедитесь, что ваши индексы i и j остаются в пределах массива.
Возможно, вам придется освежить свои знания о Массивы[^]

1 Ответов

Рейтинг:
11

CHill60

От комментариев.

OP объявил массив, но не создал новые экземпляры объекта при его заполнении.

Нужно было что-то подобное:

rounds[round][match] = new Game;
rounds[round][match].team1= team1; 
rounds[round][match].team2 = team2;