У вас есть две кости, и результат броска кубика может быть от 0 до 5. Я предполагаю, что 1001 означает, что вы хотите бросить две кости 1001 раз. Пожалуйста, дайте мне знать, если я что-то пропустил здесь.
В этом случае ваш минимальный бросок будет равен 0, а максимальный - 10. Но добавление 1 к обоим броскам костей перед доступом будет означать, что ваш индекс изменяется от 2 до 12, что приводит к вашему ArrayIndexOutOfBoundsException
.
Просто ничего не добавляйте в список. Помните, что массивы java начинаются с 0, поэтому диапазон от 0 до 10 вполне подойдет.
Быстрый пример:
public static class Die {
static Random rand = new Random();
public static int nextInt(int val) {
return rand.nextInt(val);
}
}
public static void main(String[] args) {
int[] counters = new int [11];
for (int i = 0; i <1001; i++){
//no need to add anything
++counters[Die.nextInt(6) + Die.nextInt(6)];
}
System.out.print(Arrays.toString(counters));
}
Пример выходных данных:
[27, 60, 81, 106, 157, 175, 120, 109, 81, 55, 30]
Что мы можем перевести, чтобы обозначить, что «2» было брошено 27 раз, «3» 60 времена и т. д.
То, в чем Вы нуждаетесь, является функцией PrintWindow, это доступно в Win32 API начиная с Windows XP. При необходимости в нем для работы с более старыми версиями Windows, можно попробовать WM_PRINT, хотя я никогда не мог заставить его работать.
Существует хорошая статья здесь, которая показывает, как использовать PrintWindow и здесь является отрывком соответствующих норм от той статьи:
// Takes a snapshot of the window hwnd, stored in the memory device context hdcMem
HDC hdc = GetWindowDC(hwnd);
if (hdc)
{
HDC hdcMem = CreateCompatibleDC(hdc);
if (hdcMem)
{
RECT rc;
GetWindowRect(hwnd, &rc);
HBITMAP hbitmap = CreateCompatibleBitmap(hdc, RECTWIDTH(rc), RECTHEIGHT(rc));
if (hbitmap)
{
SelectObject(hdcMem, hbitmap);
PrintWindow(hwnd, hdcMem, 0);
DeleteObject(hbitmap);
}
DeleteObject(hdcMem);
}
ReleaseDC(hwnd, hdc);
}
У меня должен быть некоторый код Python, который использует wxPython для достижения того же самого. Напишите мне, если Вы хотите это.
Скопируйте исходное растровое изображение в битовый массив памяти прежде, чем закрыться/скрыть окно.
Вы могли попытаться отправить a WM_PRINT
обменивайтесь сообщениями к окну. Для многих окон (включая все стандартные окна и общий контроль) это заставит это красить в предоставленный DC.
Кроме того, при передаче HDC как wparam сообщения WM_PAINT много окон (таких как общий контроль) нарисуют в тот DC, а не на экран.
Возможно, можно ли инициировать операцию перерисовки на окне с InvalidateRect?
К сожалению, я думаю, что Вы собираетесь иметь настоящие проблемы, заставляющие это работать надежно. Вы не говорите точно, что Вы делаете, но я предполагаю, что, учитывая дескриптор окна Вы захватываете контекст устройства, связанный с окном путем вызова GetWindowDC () и затем использования получающегося контекста устройства.
Это будет работать хорошо над XP, когда окно будет видимо. Однако на Vista, если настольное составление композита включено, оно не будет даже работать правильно затем: Вы вернетесь 0 из GetWindowDC (). Существенно, захват контекстов устройства окна не собирается работать надежно.
Если бы окно, с которого Вы пытаетесь скопировать, является частью Вашего собственного приложения, я предложил бы изменить Ваш код для поддержки WM ___ сообщение ПЕЧАТИ: это действует как WM_PAINT, но позволяет Вам предоставлять контекст устройства для вовлечения.
Если окно не из Вашего приложения, Вам в основном не повезло: если бы окно скрыто, изображение того, что оно показало бы, было ли это видимо, не существует нигде.
Функция PrintWindow, кажется, не работает над скрытым окном, только над видимыми.
Приближающиеся вещи от другой точки зрения, действительно ли Вы уверены, что это действительно, что Вы хотите сделать? Вы, например, не хотите использовать CreateCompatibleDC и CreateCompatibleBitmap для создания невидимой поверхности рисунка, привлечение этого и затем использование BitBlt?
Еще некоторая информация о предпосылках к тому, что Вы готовы, могла бы позволить кому-то предложить или решение или некоторое латеральное мышление...