我对如何计算以相同的第一个字符开头的队列中的名字数量感兴趣。
我的程序将要求用户输入多个名称,名称将存储在队列中。但是,我需要计算队列中以相同的第一个字符开头的名称数。我怎么做?我是java的新手,所以我不太了解。
应打印以下统计数据:
- 队列中以相同字母开头的国家/地区名称总数 - 要计算上述统计信息,您可以使用其他数据结构,例如Array或ArrayList / Vector。
示例:
用户输入/队列中的内容:
- 巴西
- 意大利
- 新加坡
- 西班牙
- 瑞士
- 冰岛
醇>
输出:
以I开头的国家总数:2
以S:3开头的国家总数
我已经尝试过这方面的搜索,但我还没有找到一个可靠的方法来做到这一点。任何帮助将不胜感激。
注意:我不允许使用任何Java机制,必须自己实施
到目前为止,这是我的计划。答案 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());
}
}