ошибка: несовместимые типы: int нельзя преобразовать в int [] и другие ошибки - PullRequest
1 голос
/ 10 октября 2019
import java.util.Scanner;

public class BasketBallChart {
    public static void main (String[] args) {
        Scanner reader = new Scanner(System.in);

        System.out.print("Enter the first names of the 5 players: ");
        String nameString = reader.nextLine();
        String[] name = nameString.split(" ");

        for (int i = 0; i < 5; i++) {
            System.out.print("Enter points earned by " +name[i]+ ": ");
            int pL = reader.nextInt();
            int p[i] = pL;
        }

        for (int j = 0; j < 5; j++) {
            System.out.println(p[j]);
        }
    }
}

Итак, в основном первая часть просит пользователя ввести имена 5 игроков (с пробелами), которые затем я разделяю на строковый массив.

Цикл for, который я пытался сделать такМне не нужно было бы помещать 5 отдельных printlns и входных данных, поэтому было бы меньше строк и выглядеть чище. Итак, я пытался сделать так, чтобы каждая точка была связана с количеством раз, например, был выполнен цикл for, скажем, если «i» было 0, и я ввел Оливер для имени в первом входе, имя[0] было бы Оливером, и тогда я хотел, чтобы оно равнялось количеству точек, которые вы вводите в первом цикле for, затем было бы p [0], поэтому связано с Оливером, так что они оба равны 0.

Я использовал второй цикл for для тестирования.

Я получаю ошибки и не знаю почему.

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Здесь у вас есть две проблемы с вашим кодом:

1) Вам нужно объявить массив p перед циклом, как int[] p = new int[5];

2) Затем внутри цикла присвойте значение каждому массивуэлемент типа p[i] = pL;

3) Для безопасности проверьте длину массива name, например if (name.length == 5)

    public static void main(final String[] args) {

    final Scanner reader = new Scanner(System.in);

    System.out.print("Enter the first names of the 5 players: ");
    final String nameString = reader.nextLine();
    final String[] name = nameString.split(" ");
    if (name.length == 5) {
      final int[] p = new int[5];
      for (int i = 0; i < 5; i++) {
        System.out.print("Enter points earned by " + name[i] + ": ");
        final int pL = reader.nextInt();
        p[i] = pL;
      }

      for (int j = 0; j < 5; j++) {
        System.out.println(p[j]);
      }
    }

  }
1 голос
/ 10 октября 2019

Измените ваш код на

String[] name = nameString.split(" ");
int p[] = new int[5];

for (int i = 0; i < 5 && i < name.length; i++) {  // also check name array length
        System.out.print("Enter points earned by " +name[i]+ ": ");
        int pL = reader.nextInt();
        p[i] = pL;
}

Это переместит объявление массива p до (и вне) цикла for. Я также добавил код, чтобы проверить, что цикл не превышает длину массива name.

Как предложено ниже @RolandIllig, массив p будет лучше называть pointsа массивы name лучше называть names - указание имен переменных, отражающих их использование, облегчает понимание кода.

...