В моей Java-программе есть ошибка при вводе имени и пола.Количество мужчин и женщин подсчитывается и печатается, и это повторяет процесс - PullRequest
0 голосов
/ 18 октября 2018

Процедура, описанная в этом коде, должна выполняться до тех пор, пока 1000 заявителей не введут свое имя и пол, но остановились на первом заявителе.Пожалуйста, помогите мне узнать, что происходит.Я пробовал разные способы, но это не сработало.

Вот код:

import java.util.Scanner;
public class Problem5 {
    public static void main (String [] args)
    {  
       Scanner myVar = new Scanner (System.in);
       int b = 1000;
       String [] name = new String [b];
       /*enter name and gender of applicants*/
       for (int i=0; i<name.length; i++)
       {
           int index = i;
           System.out.println("Enter name of applicant and gender:");
           System.out.println("M for male and F for female");
           name[index] = myVar.nextLine();
           
           for (String name1:name)
           {
               int maleCount = 0;
               int femaleCount = 0;
               if (name1.contains("M")) 
               {
                   maleCount++;
               } 
               if (name1.contains("F")) 
               {
                   femaleCount++;
               }
               System.out.println("NUMBER OF MALE: "+maleCount);
               System.out.println("NUMBER OF FEMALE: "+femaleCount);
           }
         }
       }
    }

Результат должен выглядеть следующим образом.Например, я ввожу свое имя Изабелла Крус и мой пол F.

Enter name of applicant and gender:
M for male and F for female
Isabella Cruz F
NUMBER OF MALE: 0
NUMBER OF FEMALE: 1

Но на этом все заканчивается, и возникает ошибка: Исключение в потоке "main" java.lang.NullPointerException в Problem5.main (Problem5.java:30)

Мне нужны решения для этого, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Есть пара вопросов.Во-первых, есть вложенный цикл.Я вижу, что вы сначала заполняете массив String, а затем перебираете его, чтобы проверить счетчик.Вам действительно нужен только один цикл.Во-вторых, вы проверяете, содержит ли строка «M» или «F», что может быть проблематично, если имя лица содержит эту строку (например, Джоанна Смит F).Вам нужно только проверить последний символ.

import java.util.Scanner;
public class Problem5 {
    public static void main (String [] args)
    {
        Scanner myVar = new Scanner (System.in);
        int b = 1000;
        String [] names = new String [b];
        int maleCount = 0;
        int femaleCount = 0;
        /*enter name and gender of applicants*/
        for (int i=0; i<name.length; i++)
        {
            System.out.println("Enter name of applicant and gender:");
            System.out.println("M for male and F for female");
            String line = myVar.nextLine();
            names[i] = line;

            // check if the line passed in is a M or F

            if (line.substring(line.length()-1).equals("M"))
            {
                maleCount++;
            }
            if (line.substring(line.length()-1).equals("F"))
            {
                femaleCount++;
            }
            System.out.println("NUMBER OF MALE: "+maleCount);
            System.out.println("NUMBER OF FEMALE: "+femaleCount);
        }
    }
}
0 голосов
/ 18 октября 2018

name имеет "Isabella Cruz F" в индексе 0, а остаток массива равен null с, поэтому name1 равен null во второй итерации.Выньте второй цикл из первого.

for (int i = 0; i < name.length; i++) {
    //...
}

for (String name1 : name) {
   //...
}

Вы также можете использовать только один цикл и получить данные там

int maleCount = 0;
int femaleCount = 0;
for (int i = 0; i < name.length; i++)
{
    int index = i;
    System.out.println("Enter name of applicant and gender:");
    System.out.println("M for male and F for female");
    name[index] = myVar.nextLine();

    if (name[index].contains("M")) {
        maleCount++;
    } 
    else if (name[index].contains("F")) {
        femaleCount++;
    }
}

System.out.println("NUMBER OF MALE: " + maleCount);
System.out.println("NUMBER OF FEMALE: " + femaleCount);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...