用堆栈类StackOfInteger降序输出最小因子

运用了类和对象以及循环来实现:

import java.util.Scanner;
public class Text {	
    public static void main(String[] args) {
    	Scanner input=new Scanner(System.in);
    	int num=input.nextInt(),ori=num,i=2;
    	StackOfInteger stack=new StackOfInteger();
    	if(num<=0)	System.out.println("Wrong!");
		else if(num==1)	
			stack.push(1);
		else {
			while(i0){
				if(num%i==0){
					stack.push(i);
					num=num/i;
				}
				else	i++;
			}
			if(ori==num) {
				stack.push(1);
				stack.push(i);
			}
		}
    	int size=stack.getSize();//!!!!!!attention:cannot directly put it into the loop!
    	for(int k=0;kreallocation
		 if(size>=elements.length) {
			 int[] temp=new int[elements.length*2];
			 System.arraycopy(elements, 0, temp, 0, elements.length);
			 elements=temp;
		 }
		 elements[size++]=value;
	 }
	 public int pop() {
		 return elements[--size];
	 }
	 public int getSize() {//返回栈顶元素
		 return size;
	 }
	 
 }
小结:

其实以前写过求整数最小因子的方法,编写完后运行以为能直接得到正确结果,结果没想到输入120控制台只显示5 3 2。Debug了半天发现elemnts和getSize都是没错的,但就是循环不到应该有的次数就直接terminal了。因此可以判定错误一定出现在循环上:

(第一次错误的循环代码)

for(int k=0;k
后来分别将两个stack的方法抽离出来,发现得到了正确答案!原来是因为 pop导致了size不断减小!若把getSize方法设置成循环控制条件,就会导致循环提前结束而出错。
此外,注意堆栈类中的 push方法要记得判满,否则若栈要存放的数据较多会导致错误。

你可能感兴趣的:(Java)