Java 计算队列中以相同字母开头的国家/地区名称的总数

Java 计算队列中以相同字母开头的国家/地区名称的总数,java,arrays,arraylist,stack,queue,Java,Arrays,Arraylist,Stack,Queue,我感兴趣的是如何计算队列中以相同第一个字符开头的名称的数量 我的程序将要求用户输入几个名称,这些名称将存储在一个队列中。但是,我需要计算队列中以相同第一个字符开头的名称的数量。我该怎么做?我是java新手,所以我知道的不多 它应该打印以下统计信息: -队列中以同一字母开头的国家名称总数。 -要计算上述统计信息,可以使用其他数据结构,如Array或ArrayList/Vector 例如: 用户输入/队列中的内容: 巴西 意大利 新加坡 西班牙 瑞士 冰岛 输出: 以I:2开始的国家总数 以S开头的

我感兴趣的是如何计算队列中以相同第一个字符开头的名称的数量

我的程序将要求用户输入几个名称,这些名称将存储在一个队列中。但是,我需要计算队列中以相同第一个字符开头的名称的数量。我该怎么做?我是java新手,所以我知道的不多

它应该打印以下统计信息:
-队列中以同一字母开头的国家名称总数。
-要计算上述统计信息,可以使用其他数据结构,如Array或ArrayList/Vector

例如:

用户输入/队列中的内容:

  • 巴西
  • 意大利
  • 新加坡
  • 西班牙
  • 瑞士
  • 冰岛
  • 输出:

    以I:2开始的国家总数

    以S开头的国家总数:3

    我已经试着搜索过了,但是我还没有找到一个可靠的方法来做这件事。任何帮助都将不胜感激

    注意:我不允许使用Java的任何机制,必须自己实现它


    这是我目前的计划

    如果您不能使用任何Java集合,您可以简单地为每个可能的字符创建一个由零填充的int数组,然后将队列中字符串的每个第一个字符转换为int,并增加该数组索引。比如:

    // on start of program
    int[] charCounts = new int[1024];
    for (int i = 0; i < charCounts.length; ++i)
    {
        charCounts[i] = 0;
    }
    
    // your loop
    System.out.println("List of countries visited: ");
    for(int i=0; i<randNum; i++)
    {
        System.out.print((i+1)+". ");
        if (!myQueue.isEmpty())
        {
            String s = (String)myQueue.dequeue();
            int charCode = Character.getNumericValue(s.charAt(0));
            ++charCounts[charCode];
        }
    }
    
    //程序启动时
    int[]字符数=新的int[1024];
    对于(int i=0;i对于(int i=0;i既然您说过允许使用ArrayList和String,那么您可以非常简单地创建一个
    String
    类型的
    ArrayList
    ,让用户将国家添加到ArrayList,然后创建一个循环来遍历ArrayList,并计算指定的字符在开始时出现的次数每一个字

    创建ArrayList:

    ArrayList<String> countries = new ArrayList<>();
    
    然后编写一个方法进行计数。您可以调用该方法
    String.charAt()
    ,查看它是否与您要查找的字符匹配:

    private int countStartingCharacters(ArrayList<String> countries, char match){
    
        int counter = 0;
    
        for (int i = 0; i < countries.size(); i++){
            if (countries.get(i).charAt(0) == match) {
                counter++;
            }
        }
    
        return counter;
    }
    
    private int countStartingCharacters(数组列表国家/地区,字符匹配){
    int计数器=0;
    对于(int i=0;i

    为了安全起见,我将count方法中的所有内容都转换为小写,并添加输入验证,但仅此而已。希望它能有所帮助。

    您可以使用下面的代码获取以特定字符开头的国家的计数-

    ArrayList<String> myList = new ArrayList<String>();
    while(!myQueue.isEmpty()) {
        myList.add((String)myQueue.dequeue());
    }
    
    
    TreeMap<Character, Integer> counts = new TreeMap<Character, Integer>();
    for(int i = 0; i < myList.size(); i++) {
        String country = myList.get(i);
        Character first = Character.toUpperCase(country.charAt(0));
        if(counts.get(first) == null) {
            counts.put(first, 0);
        }
        counts.put(first, counts.get(first) + 1);
    }
    //Now print the counts
    
    TreeSet<Character> keySet = new TreeSet<Character>(counts.keySet());
    Iterator<Character> iterator = keySet.iterator();
    while(iterator.hasNext()) {
        Character key = iterator.next();
        System.out.println("Total number of countries start with " + key + " : " + counts.get(key));
    }
    
    ArrayList myList=new ArrayList();
    而(!myQueue.isEmpty()){
    添加((字符串)myQueue.dequeue());
    }
    树映射计数=新树映射();
    对于(int i=0;i
    编辑:带有样本的样本代码队列

    import java.util.*;
    public class Test {
        public static void main (String[] args) {
            Queue myQueue = new Queue(10);
            ArrayList<String> myList = new ArrayList<String>();
            while(!myQueue.isEmpty()) {
                myList.add((String)myQueue.dequeue());
            }       
            TreeMap<Character, Integer> counts = new TreeMap<Character, Integer>();
            for(int i = 0; i < myList.size(); i++) {
                String country = myList.get(i);
                Character first = Character.toUpperCase(country.charAt(0));
                if(counts.get(first) == null) {
                    counts.put(first, 0);
                }
                counts.put(first, counts.get(first) + 1);
            }
            //Now print the counts
            TreeSet<Character> keySet = new TreeSet<Character>(counts.keySet());
            Iterator<Character> iterator = keySet.iterator();
            while(iterator.hasNext()) {
                Character key = iterator.next();
                System.out.println("Total number of countries start with " + key + " : " + counts.get(key));
            }
        }
    }
    
    class Queue {
            String[] items;
            int pointer = 10;
        Queue(int size) {
            items = new String[10];
            items[0]="Austria";
            items[1]= "United States";
            items[2]="Nepal";
            items[3]="Bhutan";
            items[4]="China";
            items[5]="Brazil";
            items[6]="Africa";
            items[7]="Sri Lanka";
            items[8]="Italy"; 
            items[9]="India";
        }
        Object dequeue() {
            pointer--;
            return items[pointer];
        }
        boolean isEmpty() {
            return pointer == 0;
        }   
    }
    
    import java.util.*;
    公开课考试{
    公共静态void main(字符串[]args){
    队列myQueue=新队列(10);
    ArrayList myList=新的ArrayList();
    而(!myQueue.isEmpty()){
    添加((字符串)myQueue.dequeue());
    }       
    树映射计数=新树映射();
    对于(int i=0;i
    您可以在队列类中实现一个方法,该方法在给定字母的情况下,返回队列中以该字母开头的名称数:

    public int countriesWith(char c){
        int counter = 0;
        for(int i = 0; i < items.length; i++){
            if(items[i].startsWith(String.valueOf(c))){
                counter++;
            }
        }
        return counter;
    }
    
    public int countriesWith(字符c){
    int计数器=0;
    对于(int i=0;i
    您可以用简单的方法解决此问题。请尝试以下方法:

      public static void main(String[] args) {
        List<String> listNames = new ArrayList<>();
        listNames.add("Austria");
        listNames.add("Russia");
        listNames.add("Brasil");
        listNames.add("Argentina");
        listNames.add("Ukraine");
        listNames.add("Belarus");
        listNames.add("Litvia");
        listNames.add("Livia");
        listNames.add("Italia"); 
    
        Map<String, Integer> nameCount = new HashMap<>();
    
        for (int i = 0; i < listNames.size(); i++) {
            int count = 0;
            for (int j = 0; j < listNames.size(); j++) {
                if (listNames.get(i).substring(0, 1).equals(listNames.get(j).substring(0, 1))) {
                    ++count;
                }
            }
            nameCount.put(listNames.get(i).substring(0, 1), count);
         }
        // output
        for (Map.Entry<String, Integer> set : nameCount.entrySet()) {
            System.out.println(set.getKey() + " : " + set.getValue());
        }
    
    }
    
    publicstaticvoidmain(字符串[]args){
    List listNames=new ArrayList();
    添加(“奥地利”);
    列表名称。添加(“俄罗斯”);
    添加(“巴西”);
    列表名称。添加(“阿根廷”);
    列表名称。添加(“乌克兰”);
    列表名称。添加(“白俄罗斯”);
    列表名称。添加(“Litvia”);
    列表名称。添加(“Livia”);
    列表名称。添加(“意大利”);
    映射名称计数=新的HashMap();
    对于(int i=0;i  public static void main(String[] args) {
        List<String> listNames = new ArrayList<>();
        listNames.add("Austria");
        listNames.add("Russia");
        listNames.add("Brasil");
        listNames.add("Argentina");
        listNames.add("Ukraine");
        listNames.add("Belarus");
        listNames.add("Litvia");
        listNames.add("Livia");
        listNames.add("Italia"); 
    
        Map<String, Integer> nameCount = new HashMap<>();
    
        for (int i = 0; i < listNames.size(); i++) {
            int count = 0;
            for (int j = 0; j < listNames.size(); j++) {
                if (listNames.get(i).substring(0, 1).equals(listNames.get(j).substring(0, 1))) {
                    ++count;
                }
            }
            nameCount.put(listNames.get(i).substring(0, 1), count);
         }
        // output
        for (Map.Entry<String, Integer> set : nameCount.entrySet()) {
            System.out.println(set.getKey() + " : " + set.getValue());
        }
    
    }