Я пытаюсь понять, как добавить в эту фэнтезийную футбольную программу новую функцию. Я хочу, чтобы пользователи могли добавлять имена для своих команд, а не просто "команда 1", "команда 2" и т.д. Я пытаюсь создать массив строк и
Я не смог понять, как это сделать после многого поиска и чтения. В настоящее время я спрашиваю у пользователя имя команды в цикле for, где я прошу оценки за каждую неделю, и это, похоже, не является правильным местом для его размещения. Любая помощь была бы оценена.
import java.util.Scanner;
public class fantasyFootball
{
private int numberOfTeams; // Same as teamAverage.length.
private int numberOfWeeks; // Same as weekAverage.length.
private int[][] score; //numberOfTeams rows and numberOfWeeks columns.
private int[] teamAverage;
private int[] scoreAverage;
public static void main(String[] args)
{
fantasyFootball book = new fantasyFootball( );
book.display();
}
public fantasyFootball(int[][] a)
{
if (a.length == 0 || a[0].length == 0)
{
System.out.println("Empty score records. Aborting.");
System.exit(0);
}
numberOfTeams = a.length;
numberOfWeeks = a[0].length;
fillScore(a);
fillTeamAverage( );
fillScoreAverage( );
}
public fantasyFootball(fantasyFootball book)
{
numberOfTeams = book.numberOfTeams;
numberOfWeeks = book.numberOfWeeks;
fillScore(book.score);
fillTeamAverage( );
fillScoreAverage( );
}
public fantasyFootball( )
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter number of teams:");
numberOfTeams = keyboard.nextInt( );
System.out.println("Enter number of weeks:");
numberOfWeeks = keyboard.nextInt( );
score = new int[numberOfTeams][numberOfWeeks];
for (int teamName = 1;
teamName <= numberOfTeams; teamName++)
for (int weekNumber = 1;
weekNumber <= numberOfWeeks; weekNumber++)
{
System.out.println("Enter team name ");
teamName.add(keyboard.nextLine());
System.out.println("Enter score for team "
+ teamName);
System.out.println("on week number " + weekNumber);
score[teamName - 1][weekNumber - 1] =
keyboard.nextInt( );
}
fillTeamAverage( );
fillScoreAverage( );
}
private void fillScore(int[][] a)
{
score = new int[numberOfTeams][numberOfWeeks];
for (int teamName = 1;
teamName <= numberOfTeams; teamName++)
{
for (int weekNumber = 1;
weekNumber <= numberOfWeeks; weekNumber++)
score[teamName][weekNumber] =
a[teamName][weekNumber];
}
}
/**
Fills the array teamAverage using the data from the array score.
*/
private void fillTeamAverage( )
{
teamAverage = new int[numberOfTeams];
for (int teamName = 1;
teamName <= numberOfTeams; teamName++)
{//Process one teamName:
int sum = 0;
for (int weekNumber = 1;
weekNumber <= numberOfWeeks; weekNumber++)
sum = sum + score[teamName - 1][weekNumber - 1];
//sum contains the sum of the week scores for team number teamName.
teamAverage[teamName - 1] = sum/numberOfWeeks;
//Average for team teamNumber is teamAverage[teamNumber - 1]
}
}
/**
Fills the array scoreAverage using the data from the array score.
*/
private void fillScoreAverage( )
{
scoreAverage = new int[numberOfWeeks];
for (int weekNumber = 1; weekNumber <= numberOfWeeks; weekNumber++)
{//Process one week (for all teams):
int sum = 0;
for (int teamName = 1;
teamName <= numberOfTeams; teamName++)
sum = sum + score[teamName - 1][weekNumber - 1];
//sum contains the sum of all team scores on week number weekNumber.
scoreAverage[weekNumber - 1] = sum/numberOfTeams;
//Average for week weekNumber is the value of weekAverage[weekNumber - 1]
}
}
public void display( )
{
for (int teamName = 1;
teamName <= numberOfTeams; teamName++)
{//Display for one teamNumber:
System.out.print("Team " + teamName + " Weeks: ");
for (int weekNumber = 1;
weekNumber <= numberOfWeeks; weekNumber++)
System.out.print(score[teamName - 1][weekNumber - 1] + " ");
System.out.println(" Ave = " + teamAverage[teamName - 1] );
}
System.out.println("Week averages: ");
for (int weekNumber = 1; weekNumber <= numberOfWeeks; weekNumber++)
System.out.print("Week " + weekNumber
+ " Ave = " + scoreAverage[weekNumber - 1] + " ");
System.out.println( );
}
private void teamName()
{
Scanner keyboard = new Scanner(System.in);
String[] teamName = new String[3];
}
}
Вот решение, использующее ArrayList
для хранения имен команд:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class fantasyFootball {
private List<String> teamNames = new ArrayList<String>();
private int numberOfTeams; // Same as teamAverage.length.
private int numberOfWeeks; // Same as weekAverage.length.
private int[][] score; // numberOfTeams rows and numberOfWeeks columns.
private int[] teamAverage;
private int[] scoreAverage;
public static void main(String[] args) {
fantasyFootball book = new fantasyFootball();
book.display();
}
public fantasyFootball(int[][] a) {
if (a.length == 0 || a[0].length == 0) {
System.out.println("Empty score records. Aborting.");
System.exit(0);
}
numberOfTeams = a.length;
numberOfWeeks = a[0].length;
fillScore(a);
fillTeamAverage();
fillScoreAverage();
}
public fantasyFootball(fantasyFootball book) {
numberOfTeams = book.numberOfTeams;
numberOfWeeks = book.numberOfWeeks;
fillScore(book.score);
fillTeamAverage();
fillScoreAverage();
}
public fantasyFootball() {
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter number of teams:");
numberOfTeams = keyboard.nextInt();
System.out.println("Enter number of weeks:");
numberOfWeeks = keyboard.nextInt();
score = new int[numberOfTeams][numberOfWeeks];
for (int teamName = 1; teamName <= numberOfTeams; teamName++){
System.out.println("Enter team " + teamName + " name ");
String name = keyboard.next();
teamNames.add(name);
for (int weekNumber = 1; weekNumber <= numberOfWeeks; weekNumber++) {
System.out.println("Enter score for team " + teamName + " on week number " + weekNumber);
score[teamName - 1][weekNumber - 1] = keyboard.nextInt();
}
}
fillTeamAverage();
fillScoreAverage();
}
private void fillScore(int[][] a) {
score = new int[numberOfTeams][numberOfWeeks];
for (int teamName = 1; teamName <= numberOfTeams; teamName++) {
for (int weekNumber = 1; weekNumber <= numberOfWeeks; weekNumber++)
score[teamName][weekNumber] = a[teamName][weekNumber];
}
}
/**
* Fills the array teamAverage using the data from the array score.
*/
private void fillTeamAverage() {
teamAverage = new int[numberOfTeams];
for (int teamName = 1; teamName <= numberOfTeams; teamName++) {// Process
// one
// teamName:
int sum = 0;
for (int weekNumber = 1; weekNumber <= numberOfWeeks; weekNumber++)
sum = sum + score[teamName - 1][weekNumber - 1];
// sum contains the sum of the week scores for team number teamName.
teamAverage[teamName - 1] = sum / numberOfWeeks;
// Average for team teamNumber is teamAverage[teamNumber - 1]
}
}
/**
* Fills the array scoreAverage using the data from the array score.
*/
private void fillScoreAverage() {
scoreAverage = new int[numberOfWeeks];
for (int weekNumber = 1; weekNumber <= numberOfWeeks; weekNumber++) {// Process
// one
// week
// (for
// all
// teams):
int sum = 0;
for (int teamName = 1; teamName <= numberOfTeams; teamName++)
sum = sum + score[teamName - 1][weekNumber - 1];
// sum contains the sum of all team scores on week number
// weekNumber.
scoreAverage[weekNumber - 1] = sum / numberOfTeams;
// Average for week weekNumber is the value of
// weekAverage[weekNumber - 1]
}
}
public void display() {
for (int teamName = 1; teamName <= numberOfTeams; teamName++)
{// Display for one teamNumber:
System.out.print("Team " + teamNames.get(teamName-1) + " Weeks: ");
for (int weekNumber = 1; weekNumber <= numberOfWeeks; weekNumber++)
System.out.print(score[teamName - 1][weekNumber - 1] + " ");
System.out.println(" Ave = " + teamAverage[teamName - 1]);
}
System.out.println("Week averages: ");
for (int weekNumber = 1; weekNumber <= numberOfWeeks; weekNumber++)
System.out.print("Week " + weekNumber + " Ave = "
+ scoreAverage[weekNumber - 1] + " ");
System.out.println();
}
private void teamName() {
Scanner keyboard = new Scanner(System.in);
String[] teamName = new String[3];
}
}
Вывод:
Enter number of teams:
3
Enter number of weeks:
2
Enter team 1 name
MyTeam1
Enter score for team 1 on week number 1
1
Enter score for team 1 on week number 2
2
Enter team 2 name
MyTeam2
Enter score for team 2 on week number 1
3
Enter score for team 2 on week number 2
4
Enter team 3 name
MyTeam3
Enter score for team 3 on week number 1
4
Enter score for team 3 on week number 2
6
Team MyTeam1 Weeks: 1 2 Ave = 1
Team MyTeam2 Weeks: 3 4 Ave = 3
Team MyTeam3 Weeks: 4 6 Ave = 5
Week averages:
Week 1 Ave = 2 Week 2 Ave = 4
Это решение, использующее простой массив объектов String. Добавить private String[] names;
в свой список полей экземпляра, создайте конструктор FantasyFootball следующим образом:
public FantasyFootball()
{
int numTeams;
int numWeeks;
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter number of teams: ");
numTeams = keyboard.nextInt();
for (int i = 0; i < numTeams; i++)
{
System.out.print("Enter the name of team " + (i+1) + ": ");
names[i] = keyboard.nextLine();
}
System.out.print("Enter number of weeks: ");
numWeeks = keyboard.nextInt();
names = new String[numTeams];
scores = new int[numTeams][numWeeks];
for (int i = 0; i < numTeams; i++)
{
for (int j = 0; j < numWeeks; j++)
{
System.out.print("Enter the score for " + names[i] + " for week " + (j+1) + ": ");
scores[i][j] = keyboard.nextInt();
}
}
fillTeamAverage();
fillScoreAverage();
}
Несколько советов по программированию:
Во-первых, я бы предложил создать объект Team, который содержит массив баллов за каждую неделю, int для команды в среднем и int для средней оценки. Затем в вашем классе fantasyFootball просто манипулируйте массивом объектов Team, а не массивом для каждого другого поля. С ним все проще работать в будущем.
Названия классов обычно начинаются с заглавных букв по соглашению. Почти все следуют за конвенцией, поэтому я настоятельно рекомендую вам сделать тоже.
Использование синтаксиса с одной строкой-так-я-не-необходимость-скобки короче, но это делает труднее читать код и сложнее отлаживать код, поэтому я также предлагаю вам использовать все фигурные скобки, а также устанавливая открывающиеся фигурные скобки на новые строки, а не в конце строки оператора. Опять же, это значительно упростит дорогу.
Наконец, в Java вы можете использовать оператор + для объединения переменных в строки, как вы знаете. Но я заметил в вашем коде, что вы напечатали несколько отпечатков на два вызова. Возможно, вы уже знаете это, но вы можете использовать более одного оператора + в том же строковом/печатном выражении, что и использование + с числами.
Надеюсь это поможет!
Я бы назначил имена команд, прежде чем получать оценки,
System.out.println("Enter number of teams:");
int numberOfTeams = keyboard.nextInt( );
String[] teamNames = new String[numberOfTeams];
for (int i = 0; i < numberOfTeams; i++) {
System.out.printf("Enter team name for team %d:%n", 1+i);
teamNames[i] = keyboard.next();
}
System.out.println("Enter team name ");
teamName.add(keyboard.nextLine());
System.out.println("Enter score for team "
+ teamName);
Изменить на:
System.out.println("Enter team name ");
String name = (keyboard.nextLine());
System.out.println("Enter score for team "
+ name);
Кроме того, если вы хотите сохранить его:
private String[] names = new String[numberOfTeams];
//Then in the above code:
names[teamName] = name;