我有两个类。第一个是主体,第二个是它的实施。
第一个
import java.util.Arrays;
public class DecrementingCarousel {
int capacity;
static int[] elements;
int size = 0;
boolean called;
public DecrementingCarousel(int capacity) {
this.capacity = capacity;
elements = new int[capacity];
}
public boolean addElement(int element) {
if (element <= 0 || elements.length == size) {
return false;
}
elements[size++] = element;
return true;
}
public CarouselRun run() {
if (!called) {
elements = Arrays.copyOf(elements, size);
called = true;
return new CarouselRun();
} else {
return null;
}
}
}
秒
public class CarouselRun {
int count = 0;
int[] array = DecrementingCarousel.elements;
public int next() {
if (array.length == 0) {
return -1;
}
if (count == array.length) {
count = 0;
}
while (array[count] == 0) {
count++;
if (count > array.length - 1) {
count = 0;
}
if (isFinished()) {
return -1;
}
}
for (int i = 1; i < array.length; i++) {
if (array[i] == -1) {
break;
}
}
count++;
action(count - 1);
return array[count - 1] + 1;
}
public boolean isFinished() {
int sum = 0;
for (int i = 0; i < array.length; i++) {
sum += array[i];
}
return sum == 0;
}
public void action(int index) {
array[index]--;
}
}
然后我有了一个新课,让我们称之为"Halving Carousel";它扩展了我们的第一类:
public class HalvingCarousel extends DecrementingCarousel {
public HalvingCarousel(final int capacity) {
super(capacity);
}
}
我应该做什么,这样它就不会把元素减少一,而是把它除以2。需要应用正则整数除法,丢弃余数。例如,5/2=2。
通过查看您的代码,可以看出count
是int
的类型。所以,如果你除以二,你会得到想要的结果:
int foo = 5 / 2;
System.out.println(foo); // 2
这是DividingCarousel:的简单示例
public class DecrementingCarousel
{
public int Capacity;
public DecrementingCarousel(int capacity)
{
Capacity = capacity;
Capacity -= 1;
}
}
和:
public class DivideCarousel extends DecrementingCarousel
{
public DivideCarousel(int capacity)
{
super(capacity);
Capacity = capacity / 2;
}
}