Вам необходимо объявить pointsNumber
вне функции:
var pointsNumber = 0;
document.getElementById("guess-number").onclick = function() {
var ourNumber;
var randomNumber;
В противном случае, каждый раз, когда вызывается функция onclick, вы объявляете pointsNumber
и устанавливаете ее в 0. Затем она получает +1 или -1 в зависимости от if
/ else
, что объясняет поведение, которое вы наблюдаете.
Если Вы - пользователь моего ForEach DSL, он может быть сделан с Count
запрос.
Count<String> query = Count.from(list);
for (Count<Foo> each: query) each.yield = "bat".equals(each.element);
int number = query.result();
Также - это старомодный путь и самокрутка:
Map<String, Integer> instances = new HashMap<String, Integer>();
void add(String name) {
Integer value = instances.get(name);
if (value == null) {
value = new Integer(0);
instances.put(name, value);
}
instances.put(name, value++);
}
Поместите элементы arraylist в hashMap для подсчета частоты.
Немного более эффективный подход мог бы быть
Map<String, AtomicInteger> instances = new HashMap<String, AtomicInteger>();
void add(String name) {
AtomicInteger value = instances.get(name);
if (value == null)
instances.put(name, new AtomicInteger(1));
else
value.incrementAndGet();
}
Интересно, почему Вы не можете использовать Набор того Google API с JDK 1.6. Это говорит так? Я думаю, что Вы можете, не должно быть никаких проблем совместимости, поскольку это создается для более низкой версии. Случай отличался бы, если это было создано для 1,6, и Вы работаете 1.5.
я неправильно где-нибудь?
Нет никакого собственного метода в Java, чтобы сделать это для Вас. Однако можно использовать IterableUtils#countMatches () от Наборов палаты общин Apache, чтобы сделать это для Вас.
Извините нет никакого вызова простого метода, который может сделать это. Все, что необходимо было бы сделать, хотя, создает карту и частоту количества с нею.
HashMap<String,int> frequencymap = new HashMap<String,int>();
foreach(String a in animals) {
if(frequencymap.containsKey(a)) {
frequencymap.put(a, frequencymap.get(a)+1);
}
else{ frequencymap.put(a, 1); }
}
Это показывает, почему это важно для" , Относятся к объектам их интерфейсами ", как описано в Эффективная книга Java.
, Если Вы кодируете к реализации и используете ArrayList в скажем, 50 мест в Вашем коде при нахождении хорошей реализации "Списка", которые считают объекты, необходимо будет изменить все те 50 мест, и вероятно необходимо будет взломать код (если это только используется Вами нет грандиозного предприятия, но если это будет использоваться кем-то еще использование, то Вы взломаете их код также)
Путем программирования к интерфейсу, можно позволить тем 50 неизменным местам и заменить реализацию от ArrayList до "CountItemsList" (например), или некоторого другого класса.
Ниже очень простой образец о том, как это могло быть записано. Это - только образец, производство, готовый Список был бы очень более сложен.
import java.util.*;
public class CountItemsList<E> extends ArrayList<E> {
// This is private. It is not visible from outside.
private Map<E,Integer> count = new HashMap<E,Integer>();
// There are several entry points to this class
// this is just to show one of them.
public boolean add( E element ) {
if( !count.containsKey( element ) ){
count.put( element, 1 );
} else {
count.put( element, count.get( element ) + 1 );
}
return super.add( element );
}
// This method belongs to CountItemList interface ( or class )
// to used you have to cast.
public int getCount( E element ) {
if( ! count.containsKey( element ) ) {
return 0;
}
return count.get( element );
}
public static void main( String [] args ) {
List<String> animals = new CountItemsList<String>();
animals.add("bat");
animals.add("owl");
animals.add("bat");
animals.add("bat");
System.out.println( (( CountItemsList<String> )animals).getCount( "bat" ));
}
}
принципы OO, примененные здесь: наследование, полиморфизм, абстракция, инкапсуляция.
То, что Вы хотите, является Сумкой - который похож на набор, но также и считает количество происшествий. К сожалению, платформа Наборов Java - большой, как они, не имеет Сумки impl. Поскольку тот должен использовать Apache Общий Набор текст ссылки
Я почти уверен, что статический частотный метод в Коллекциях пригодится здесь:
int occurrences = Collections.frequency(animals, "bat");
Я бы так и поступил в любом случае. Я почти уверен, что это jdk 1.6.