diff --git a/java/io/nayuki/qrcodegen/BitBuffer.java b/java/io/nayuki/qrcodegen/BitBuffer.java index b2b62b8..861ffcc 100644 --- a/java/io/nayuki/qrcodegen/BitBuffer.java +++ b/java/io/nayuki/qrcodegen/BitBuffer.java @@ -83,8 +83,10 @@ public final class BitBuffer implements Cloneable { */ public byte[] getBytes() { byte[] result = new byte[(bitLength + 7) >>> 3]; // Round up to whole byte, won't overflow - for (int i = 0; i < bitLength; i++) - result[i >>> 3] |= data.get(i) ? 1 << (7 - (i & 7)) : 0; + for (int i = 0; i < bitLength; i++) { + if (data.get(i)) + result[i >>> 3] |= 1 << (7 - (i & 7)); + } return result; } diff --git a/java/io/nayuki/qrcodegen/QrCode.java b/java/io/nayuki/qrcodegen/QrCode.java index 5c8a619..b56c55d 100644 --- a/java/io/nayuki/qrcodegen/QrCode.java +++ b/java/io/nayuki/qrcodegen/QrCode.java @@ -262,8 +262,8 @@ public final class QrCode { BufferedImage result = new BufferedImage((size + border * 2) * scale, (size + border * 2) * scale, BufferedImage.TYPE_INT_RGB); for (int y = 0; y < result.getHeight(); y++) { for (int x = 0; x < result.getWidth(); x++) { - boolean val = getModule(x / scale - border, y / scale - border); - result.setRGB(x, y, val ? 0x000000 : 0xFFFFFF); + boolean color = getModule(x / scale - border, y / scale - border); + result.setRGB(x, y, color ? 0x000000 : 0xFFFFFF); } } return result; @@ -445,8 +445,8 @@ public final class QrCode { ReedSolomonGenerator rs = new ReedSolomonGenerator(blockEccLen); for (int i = 0, k = 0; i < numBlocks; i++) { byte[] dat = Arrays.copyOfRange(data, k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1)); - byte[] block = Arrays.copyOf(dat, shortBlockLen + 1); k += dat.length; + byte[] block = Arrays.copyOf(dat, shortBlockLen + 1); byte[] ecc = rs.getRemainder(dat); System.arraycopy(ecc, 0, block, block.length - blockEccLen, ecc.length); blocks[i] = block; @@ -668,7 +668,7 @@ public final class QrCode { int size = ver * 4 + 17; int result = size * size; // Number of modules in the whole QR symbol square - result -= 64 * 3; // Subtract the three finders with separators + result -= 8 * 8 * 3; // Subtract the three finders with separators result -= 15 * 2 + 1; // Subtract the format information and black module result -= (size - 16) * 2; // Subtract the timing patterns // The five lines above are equivalent to: int result = (16 * ver + 128) * ver + 64; diff --git a/java/io/nayuki/qrcodegen/QrSegment.java b/java/io/nayuki/qrcodegen/QrSegment.java index 4dbb6a6..a9a464f 100644 --- a/java/io/nayuki/qrcodegen/QrSegment.java +++ b/java/io/nayuki/qrcodegen/QrSegment.java @@ -259,7 +259,7 @@ public final class QrSegment { /*-- Constructor --*/ private Mode(int mode, int... ccbits) { - this.modeBits = mode; + modeBits = mode; numBitsCharCount = ccbits; } diff --git a/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java b/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java index a485c8a..541d230 100644 --- a/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java +++ b/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java @@ -224,6 +224,7 @@ public final class QrSegmentAdvanced { } + /*---- Kanji mode segment encoder ----*/ /** @@ -384,17 +385,17 @@ public final class QrSegmentAdvanced { "/////////////////////////////////////////////w=="; - private static short[] UNICODE_TO_QR_KANJI = new short[65536]; + private static short[] UNICODE_TO_QR_KANJI = new short[1 << 16]; static { // Unpack the Shift JIS table into a more computation-friendly form Arrays.fill(UNICODE_TO_QR_KANJI, (short)-1); byte[] bytes = Base64.getDecoder().decode(PACKED_QR_KANJI_TO_UNICODE); for (int i = 0; i < bytes.length; i += 2) { - int j = ((bytes[i] & 0xFF) << 8) | (bytes[i + 1] & 0xFF); - if (j == 0xFFFF) + char c = (char)(((bytes[i] & 0xFF) << 8) | (bytes[i + 1] & 0xFF)); + if (c == 0xFFFF) continue; - assert UNICODE_TO_QR_KANJI[j] == -1; - UNICODE_TO_QR_KANJI[j] = (short)(i / 2); + assert UNICODE_TO_QR_KANJI[c] == -1; + UNICODE_TO_QR_KANJI[c] = (short)(i / 2); } }