如何优化Java中实现精准数值平滑移动的Switch代码?
精简Java按钮平滑移动代码的方案
Great question! Using an array is exactly the right approach here—your current switch statement is full of repetitive logic, and mapping those exact viewGravity values to Y offsets via an array will clean this up nicely while preserving all your precise numbers.
核心思路
每个viewGravity值都对应一个固定的viewY变化量,只有两个特殊场景需要更新viewJumping状态。我们可以把所有Y轴偏移量存在数组里(数组索引对应viewGravity的值),再单独处理那两个特殊的状态修改逻辑。这样就能彻底消除冗余的switch case模板代码。
简化后的代码示例
首先,把偏移量定义为常量数组(这样你的精确数值会更规整,后续修改也更方便):
// 数组索引对应viewGravity的值,元素是对应的viewY变化量 private static final int[] GRAVITY_Y_OFFSETS = { -2, // viewGravity = 0 -2, // viewGravity = 1 -2, // viewGravity = 2 -2, // viewGravity = 3 -4, // viewGravity = 4 -8, // viewGravity = 5 -16, // viewGravity = 6 -24, // viewGravity = 7 -32, // viewGravity = 8 -40, // viewGravity = 9 -48, // viewGravity = 10 0, // viewGravity = 11(原代码未处理,默认设为0不影响逻辑) 2, // viewGravity = 12 2, // viewGravity = 13 2, // viewGravity = 14 2, // viewGravity = 15 4, // viewGravity = 16 8, // viewGravity = 17 16, // viewGravity = 18 24, // viewGravity = 19 32, // viewGravity = 20 40, // viewGravity = 21 48 // viewGravity = 22 };
然后用下面这段简洁的逻辑替换你原来的switch语句:
if (viewJumping == 1) { // 先处理需要修改viewJumping的特殊情况 if (viewGravity == 0) { viewJumping = 2; } else if (viewGravity == 12) { viewJumping = 0; } // 通过预定义的偏移数组更新viewY,同时做边界检查避免越界 if (viewGravity >= 0 && viewGravity < GRAVITY_Y_OFFSETS.length) { viewY += GRAVITY_Y_OFFSETS[viewGravity]; } viewGravity -= 1; }
这个方案的优势
- 精确数值完全保留: 你原来代码里的每一个偏移量都完整存在数组中,不会改变按钮的移动行为。
- 更简洁易维护: 再也不用重复写一堆
viewY -= X的代码,后续修改数值只需要编辑数组,不用在switch case里逐个查找。 - 更安全: 边界检查能避免如果
viewGravity超出0-22范围时出现数组越界错误。
内容的提问来源于stack exchange,提问作者Paper
相关产品推荐
相关产品推荐

