Ничто Важнейшее, я признаю, но я поймал людей использование StringBuffer для конкатенации Строк за пределами цикла в Java. Это было что-то простое как превращение
String msg = "Count = " + count + " of " + total + ".";
в
StringBuffer sb = new StringBuffer("Count = ");
sb.append(count);
sb.append(" of ");
sb.append(total);
sb.append(".");
String msg = sb.toString();
, Это раньше было довольно обычной практикой для использования техники в цикле, потому что это было в известной мере быстрее. Вещь, StringBuffer синхронизируется, таким образом, существует на самом деле дополнительно служебный, если Вы только связываете несколько Строк. (Не говоря уже о том, что различие абсолютно тривиально в этом масштабе.) Две других точки об этой практике:
" Комментарии к документации XML (Руководство по программированию на C #) В Visual C # вы можете создать документацию для своего кода, включив теги XML в специальные поля комментариев в исходном коде непосредственно перед блоком кода, на который они ссылаются. "
http://msdn.microsoft.com/en-us/library /b2s063f7.aspx
затем вы можете использовать Sandcastle для создания файлов chm, если хотите
-121 --- 14129 ] _cancelled должен быть изменчивым
. (если вы не выбрали блокировку)
Если один поток изменяет значение _cancelled
, другие потоки могут не видеть обновленное результат.
Кроме того, я думаю, что операции чтения / записи _cancelled
являются атомарными :
Раздел 12.6.6 спецификации CLI гласит: "A conforming CLI shall guarantee that read and write access to properly aligned memory locations no larger than the native word size is atomic when all the write accesses to a При рисовании пунктирных линий вы можете изменять расстояние между штрихами, чтобы убедиться, что у вас никогда не будет частичных четырехугольников на конечных точках. Это может визуально отвлекать, так как расстояние будет регулироваться в зависимости от длины сегмента.
edit:
Ах, картинка помогает. Я предполагаю, что, поскольку это на iPhone, вы получаете серию точек, из которых линии между ними дают приемлемую кривую. Если это так, использование примитивов сплайнов / кривых, вероятно, излишне. Я бы, вероятно, подошел к рисованию линий, как показано, просто путем рисования четырехугольников в каждой точке данных, которая находится на заданном расстоянии от последней точки данных.
Алгоритм будет примерно таким:
- Нарисовать четырехугольник на первой точке данных (с соответствующим поворотом)
- Перемещайтесь по списку точек, пока не «Я @ 190d11]" which means that you have actually constructed an ArrayList that contains int arrays.
Your IDE and compiler should warn about unchecked assignments in that code. You should always use
new ArrayList
or() new ArrayList<>()
instead ofnew ArrayList()
. If you had used it, there would have been a compile error because of trying to passList
to the constructor.There is no autoboxing from
int[]
toInteger[]
, and anyways autoboxing is only syntactic sugar in the compiler, so in this case you need to do the array copy manually:public static int getTheNumber(int[] factors) { List<Integer> f = new ArrayList<Integer>(); for (int factor : factors) { f.add(factor); // after autoboxing the same as: f.add(Integer.valueOf(factor)); } Collections.sort(f); return f.get(0) * f.get(f.size() - 1); }
Вы пытаетесь преобразовать int [] в Integer [], это невозможно.
Вы можете использовать ArrayUtils commons-lang для преобразования целых чисел в целые числа перед получением списка из array:
public int getTheNumber(int[] factors) {
Integer[] integers = ArrayUtils.toObject(factors);
ArrayList<Integer> f = new ArrayList<Integer>(Arrays.asList(integers));
Collections.sort(f);
return f.get(0)*f.get(f.size()-1);
}
есть две причины этого исключения:
Arrays.asList (факторы)
возвращает список List
, где факторы
- это массив int
, вы забыли добавить параметр типа в:
ArrayList<Integer> f = new ArrayList(Arrays.asList(factors));
с:
ArrayList<Integer> f = new ArrayList<Integer>(Arrays.asList(factors));
, что привело к ошибке времени компиляции :
found : java.util.List<int[]> required: java.util.List<java.lang.Integer>
Используйте java.utils.Arrays:
public int getTheNumber(int[] factors) {
int[] f = (int[])factors.clone();
Arrays.sort(f);
return f[0]*f[(f.length-1];
}
Или, если вы хотите быть эффективным, избегайте выделения всех объектов, просто выполняйте работу:
public static int getTheNumber(int[] array) {
if (array.length == 0)
throw new IllegalArgumentException();
int min = array[0];
int max = array[0];
for (int i = 1; i< array.length;++i) {
int v = array[i];
if (v < min) {
min = v;
} else if (v > max) {
max = v;
}
}
return min * max;
}
Я думаю, вы нашли пример, в котором автоматическая упаковка не работает. Поскольку Arrays.asList (T ... a)
имеет параметр varargs, компилятор явно учитывает int [] и возвращает List
с одним элементом в нем.
Вы должны изменить метод на этот:
public int getTheNumber(Integer[] factors) {
ArrayList<Integer> f = new ArrayList<Integer>(Arrays.asList(factors));
Collections.sort(f);
return f.get(0) * f.get(f.size() - 1);
}
и, возможно, добавить это для совместимости
public int getTheNumber(int[] factors) {
Integer[] factorsInteger = new Integer[factors.length];
for(int ii=0; ii<factors.length; ++ii) {
factorsInteger[ii] = factors[ii];
}
return getTheNumber(factorsInteger);
}
Arrays.asList (factor)
возвращает List
, а не List
. Поскольку вы выполняете new ArrayList
вместо new ArrayList
, вы не получаете ошибку компиляции для этого, но создаете ArrayList
который содержит int []
, и затем вы неявно приводите этот arrayylist к ArrayList
. Конечно, при первой попытке использовать одно из этих «Целых чисел» возникает исключение.
это из Java API "sort
public static void sort (Список списка) Сортирует указанный список в порядке возрастания в соответствии с естественным порядком его элементов. Все элементы в списке должны реализовывать интерфейс Comparable. Кроме того, все элементы в списке должны быть взаимно сопоставимы (то есть e1.compareTo (e2) не должен вызывать исключение ClassCastException для любых элементов e1 и e2 в списке) »
, это связано с реализацией интерфейса Comparable
Насколько я понимаю, функцию сортировки в классе коллекции можно использовать только для сортировки коллекций, реализующих сопоставимый интерфейс.
Вы предоставляете ей массив целых чисел. Вам, вероятно, следует обернуть это вокруг одного из известных классов Wrapper, таких как Integer. Целочисленные инструменты сопоставимы.
Прошло много времени с тех пор, как я работал над серьезным Java, однако чтение некоторых материалов по функции сортировки может помочь.