为了账号安全,请及时绑定邮箱和手机立即绑定

我的 Java 程序中有关于输入姓名和性别的错误。计算并打印男性和女性的数量并重复该过程

我的 Java 程序中有关于输入姓名和性别的错误。计算并打印男性和女性的数量并重复该过程

摇曳的蔷薇 2021-11-24 19:02:16
此代码的过程必须循环直到 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);           }         }       }    }结果必须如下所示。例如,我输入我的名字 Isabella Cruz 和我的性别 F。Enter name of applicant and gender:M for male and F for femaleIsabella Cruz FNUMBER OF MALE: 0NUMBER OF FEMALE: 1但是,它停在那里并出现错误: 在 Problem5.main(Problem5.java:30) 线程“main”java.lang.NullPointerException 中出现异常我需要解决方案,请。
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

name具有"Isabella Cruz F"在索引0和阵列的其余部分是nullS,SO 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);


查看完整回答
反对 回复 2021-11-24
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

有几个问题。首先是有一个嵌套的 for 循环。我看到您首先填充 String 数组,然后对其进行迭代以检查计数。你真的只需要一个循环。其次是您正在检查字符串是否包含“M”或“F”,如果人名包含该字符串(Ex Joanna M Smith 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);

        }

    }

}


查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 155 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信