【问题标题】:Java - Using a keyword to find how many are in the arrayJava - 使用关键字查找数组中有多少
【发布时间】:2014-07-09 08:44:28
【问题描述】:

我想知道我的阵列中有多少男性和女性。使用单词 (M) 和 (F) 作为指示符。我目前不知道该怎么做。

这是我的数组:

String[] ppl = new String[]{"Karen (F)","Kevin (M)","Lee (M)","Joan (F)","Des (M)","Rick (M)"};  

【问题讨论】:

  • 循环遍历数组,检查数组中的每个元素是否以(F)(M)结尾?
  • for(String s: ppl){ if (s.contains("(M)") male++} female=ppl.length-male;
  • 如何使用 (f) 和 (m) 检查数组?
  • 这是其他人告诉你的。 (在 cmets 和答案中)大声笑
  • @Harry 不是那个的副本。

标签: java arrays keyword


【解决方案1】:

在 Java 8 中,您可以做到这一点。

String[] ppl = {"Karen (F)","Kevin (M)","Lee (M)","Joan (F)","Des (M)","Rick (M)"};
long male = Stream.of(ppl).filter(s -> s.endsWith("(M)")).count();
long female = Stream.of(ppl).filter(s -> s.endsWith("(F)")).count();

如果您不知道具体情况,可以添加.toUpperCase(),和/或如果您不知道(F) 的位置,请使用.contains 而不是.endsWith

【讨论】:

  • 你的 ans 是聚合函数和 lamdas 的很好演示,但用户似乎几乎不知道 java1.5/6
  • 如果你可以假设每个人都是男性或女性,long female = ppl.length - male 对于长列表会更快。
  • @Shail016 我同意,这很可能是 OP 应该为自己完成的作业;)但使用 Java 8 回答更有可能让更多人感兴趣。
  • @Trengot 我不想暗示女性是“非男性”或者男性是值得数的。 ;)
  • @Shail016 我试图回答家庭作业问题,这些问题都提供了丰富的信息,但学生不能冒充自己的作业。 ;)
【解决方案2】:

这是我的解决方案:

String[] ppl = new String[]{"Karen (F)","Kevin (M)","Lee (M)","Joan (F)","Des (M)","Rick (M)"};
int maleCount = 0;
for (String str : ppl) {
  if (str.trim().toUpperCase().endsWith("(M)")) {
    maleCount++;
  }
}

System.out.println("Male count: " + maleCount);
System.out.println("Female count: " + (ppl.length - maleCount));

结果:

Male count: 4
Female count: 2

解释:你现在输入的大小(array.length())。您只需要计算所有的男性(或女性)和其他可以推导出来。

【讨论】:

  • 如果 (m) 和 (f) 出现在字符串的开头或中间怎么办?
  • 你可以使用toUpperCase()
  • 在任何你可以使用 contains() 的地方
【解决方案3】:

这里是代码示例 -

public static void main(String[] args) {
    String[] ppl = new String[]{"Karen (F)","Kevin (M)","Lee (M)","Joan (F)","Des (M)","Rick (M)"};
    int maleCount = 0;
    int femaleCount = 0;
    for (int i = 0; i < ppl.length; i++) {
        if(ppl[i].contains("(M)")){
            maleCount++;
        }
        if(ppl[i].contains("(F)")){
            femaleCount++;
        }
    }
    System.out.println("maleCount: "+maleCount);
    System.out.println("femaleCount: "+femaleCount);
    }

输出:

maleCount: 4
femaleCount: 2

【讨论】:

  • 我想你的意思是 malefemale ;)
  • for-eachelse-if 会更好..:)
【解决方案4】:
String[] arr = new String[]{"Karen (F)","Kevin (M)","Lee (M)","Joan (F)","Des (M)","Rick (M)"};
    int maleCount=0,femaleCount=0;
    for(String element : arr){
        if(element.endsWith("(F)")){
            femaleCount++;
            System.out.println(element +" is Female");
        }else if(element.endsWith("(M)")){
            maleCount++;
            System.out.println(element +" is Male");
        }
    }
    System.out.println("Total males "+maleCount +" Total Females "+femaleCount);

【讨论】:

    【解决方案5】:

    未经测试,但这应该可以帮助您完成大部分工作。这不是像 "Karen" => "F" 这样的哈希值。但部分 ".substring(-3)" 应该计算 (F) 和 (M) 的出现次数。have a look at this question

    String[] arr = new String[]{"Karen (F)","Kevin (M)","Lee (M)","Joan (F)","Des (M)","Rick (M)"};
    Integer counter = 0;
    String lastItem = arr[0];
    for(int i = 0; i < arr.length; i++)
    {
        if(arr[i].substring(-3).equals(lastItem))
        {
            counter++;
        }
        else
        {
            itemCount.add(counter);
            counter = 1;
        }
        lastItem = arr[i];
    }
    itemCount.add(counter);
    Integer[] Counts = itemCount.toArray(new Integer[itemCount.size()]);
    

    【讨论】:

      【解决方案6】:

      我发现这段代码易于使用和理解(无需迭代):

      String[] ppl = new String[]{"Karen (F)","Kevin (M)","Lee (M)","Joan (F)","Des (M)","Rick (M)"};
          String ss=Arrays.toString(ppl).replaceAll("[\\[\\]]", "");
          int malecount = ss.split("(M)").length - 1;
          int femalecount = ss.split("(F)").length - 1;
      

      :)

      【讨论】:

        【解决方案7】:
          String[] ppl = new String[]{"Karen (F)","Kevin (M)","Lee (M)","Joan (F)","Des (M)","Rick (M)"};
              int k,m=0,f=0;
              for( k=0;k<ppl.length;k++)
              {
              if(ppl[k].contains("(F)"))
                  f=f+1;
                if(ppl[k].contains("(M)"))
                  m=m+1;  
              }
        

        【讨论】:

          【解决方案8】:

          尝试使用类和枚举来表示数据,因此您将名称与性别分开。

          定义性别:

          public enum Gender {
               MALE, FEMALE, SHEMALE_WTF;
          }
          

          定义一个人:

          public class Person {
              private String name;
              private Gender gender;
          
              public Person(String name, Gender gender) {
                  this.name = name;
                  this.gender = gender;
              }
          
              public void setGender(Gender gender) {
                  this.gender = gender;
              }
              public Gender getGender() {
                  return gender;
              }
              public void setName(String name) {
                  this.name = name;
              }
              public String getName() {
                 return name;
              }
          
              public boolean isGender(Gender gender) {
                 return this.gender == gender;
              }
          }
          

          现在我们可以简单地通过编写来创建一个人:

          Person karen = new Person("Karen", Gender.FEMALE);
          

          让我们检查一下'karen'是否是男​​性:

          if(karen.isGender(Gender.MALE)) {
               //Ok, karen is a male
          }
          else {
               //karen is not a male
          }
          

          让我们创建一个 Person 数组而不是 String 数组:

          Person[] ppl = new Person[]{new Person("Karen", Gender.FEMALE),new Person("Kevin", Gender.MALE),new Person("Lee", Gender.MALE),new Person("Joan", Gender.FEMALE),new Person("Des", Gender.MALE),new Person("Rick", Gender.MALE)};
          

          现在让我们来数数:

          int females = 0;
          int males = 0;
          
          
          for(Person person : ppl) {
               switch(person.getGender()) {
                   case Gender.MALE: 
                        males++;
                        break;
                   case Gender.FEMALE:
                        females++;
                        break;
                   case Gender.SHEMALE_WTF:
                        //hmm?
                        males++;
                        females++;
                        break;
                        // but I would just:
                        // throw new SecurityException("SYSTEM GOT VIRUS!!!!");
          
                }
           }
          

          现在您有了一个易于阅读的代码。

          【讨论】:

            猜你喜欢
            • 2020-02-01
            • 2013-11-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多