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

时间:2016-01-09 13:35:51

标签: java arrays arraylist stack queue

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

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

  

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

示例:

  

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

     
      
  1. 巴西
  2.   
  3. 意大利
  4.   
  5. 新加坡
  6.   
  7. 西班牙
  8.   
  9. 瑞士
  10.   
  11. 冰岛
  12.   

输出:

  

以I开头的国家总数:2

     

以S:3开头的国家总数

我已经尝试过这方面的搜索,但我还没有找到一个可靠的方法来做到这一点。任何帮助将不胜感激。

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

到目前为止,这是我的计划。

5 个答案:

答案 0 :(得分:0)

如果你不能使用任何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];
    }
}

答案 1 :(得分:0)

由于您说允许使用ArrayList和String,您可以简单地创建ArrayList类型String,让用户将国家/地区添加到ArrayList,然后创建一个循环迭代ArrayList并计算每个单词开头指定字符的次数。

创建ArrayList:

ArrayList<String> countries = new ArrayList<>();

我要手动将一些国家/地区添加到列表中,但在您的情况下,您需要用户输入:

    listOfCountries.add("Germany");
    listOfCountries.add("Scotland");
    listOfCountries.add("England");
    listOfCountries.add("Switzerland");
    listOfCountries.add("Uganda");

然后写一个方法来计算。您可以调用方法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;
}

为了安全起见,我会在count方法中将所有内容都转换为小写,然后添加输入验证,但这就是全部。希望它有所帮助。

答案 2 :(得分:0)

您可以使用以下代码来计算以特定字符开头的国家/地区 -

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));
}

编辑:带示例的示例代码 队列

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;
    }   
}

答案 3 :(得分:0)

您可以在队列类中实现一个方法,给定一个字母,它返回队列中以该字母开头的名称数:

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;
}

答案 4 :(得分:0)

您可以通过简单的方式解决此问题。请尝试:

  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());
    }

}