我有这个非常快速的问题,我猜是只是盯着我,但我无法看到它。我不得不计算数组中某个名称的出现次数。我使用循环,因为我不允许使用类,hashmap等。所以我有93个名字,例如Jake发生5次,我想要出来:
Jack - 5
相反,我的程序显示
Jack - 5
Jack - 5
Jack - 5
Jack - 5
Jack - 5
我只想打印一次,这是我的循环:
for (int counter = 0; counter < name.length; counter++)
{
String n = (name[counter]);
int count = 0;
for (int i = 0; i < name.length; i++){
if (name[i].equals(n))
count++;
}
System.out.println(n + " - " + count);
}
理想的输出应该是:
Jack - 5
我需要打印星号作为输出,所以我想说它
Jack (5) *****
每个星号代表一个事件,我知道如何打印它们,我把它放在我的代码中但显示
***** Jack(5)
我想知道我怎么能解决这个问题,任何想法?
答案 0 :(得分:1)
您循环浏览列表中的每个名称并每次都进行检查。因此,你要检查杰克的名字5次,所以你得到5个输出。
由于某些原因你不允许使用HashMaps,这应该解决它:
String name[] = new String[]{"jack", "jack", "jack", "james", "jack", "jack", "james"};
ArrayList<String> checkedNames = new ArrayList<String>();
for (int counter = 0; counter < name.length; counter++)
{
String n = (name[counter]);
if(!checkedNames.contains(n))
{
int count = 0;
for (int i = 0; i < name.length; i++){
if (name[i].equals(n))
count++;
}
checkedNames.add(n);
System.out.println(n + " - " + count);
}
}
编辑:由于您无法使用ArrayLists但可以对数组进行排序:
String name[] = new String[]{"jack", "jack", "jack", "jack", "jack", "james"};
String lastName = "";
Arrays.sort(name);
for (int counter = 0; counter < name.length; counter++)
{
String n = (name[counter]);
if(!lastName.equals(n))
{
int count = 0;
for (int i = 0; i < name.length; i++){
if (name[i].equals(n))
count++;
}
System.out.println(n + " - " + count);
}
lastName = n;
}
第二次修改:
首先,Arrays是一个内置于Java中的类,就像String是:
http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html
其次,如果您希望它打印星号,请将System.out.println行更改为:
System.out.println(n + " (" + count + ")" + new String(new char[count]).replace("\0", "*"));
答案 1 :(得分:0)
你会尝试使用不同的数组(比如说encouteredNames
)来存储那些你已经计算过的出现次数的名字吗?只有当您确定之前未搜索过要搜索的名称(或者它仍未存储在encounteredNames
数组中)时,才执行“计数”循环。
我确信有比这更好的实现,但同时:
String[] names = {"Jack", "James", "Charles", "Jack", "Jack", "James"};
String[] encounteredNames = new String[names.length];
int encounteredNamesCount = 0;
for (int counter = 0; counter < names.length; counter++) {
String name = (names[counter]);
boolean nameAlreadyEncountered = false;
for (int i = 0; i < encounteredNames.length && encounteredNames[i] != null; i++) {
if (encounteredNames[i] == name) {
nameAlreadyEncountered = true;
break;
}
}
if (!nameAlreadyEncountered) {
encounteredNames[encounteredNamesCount++] = name;
int count = 0;
for (int i = 0; i < names.length; i++){
if (names[i].equals(name)) {
count++;
}
}
System.out.println(name + " - " + count);
}
}
答案 2 :(得分:0)
请检查下一个代码:
for (int counter = 0; counter < name.length; counter++)
{
String n = (name[counter]);
int count = 0;
boolean flag = true;
for (int i = 0; i < counter; i++){
if (name[i].equals(n)) {
flag = false;
}
}
if (flag) {
for (int i = 0; i < name.length; i++){
if (name[i].equals(n))
count++;
}
System.out.println(n + " - " + count);
}
}
在这里,您检查了数组中是否还没有选定的名称(从0到计数器),而不是计算它在数组和显示信息中保留的次数。