日期:2014-05-20  浏览次数:20964 次

求高手指点这段代码
简单的鸡兔同笼问题,算法没错,能运行,就是运行时会出问题,老师在判断的地方出错,求大神指点,不胜感激!

import java.util.*;
public class ChickenAndRabbit {
int head=0;
int leg=0;
int temp=0;
public void Head(){
//判断头的个数是否小于零
if(head<=0){
Scanner sc=new Scanner(System.in);
System.out.print("头的个数输入有误,应为正整数,请输入头的个数:");
head=sc.nextInt();
}
}

public void Leg(){
//判断腿的个数是否为奇数
if(leg%2==1){
Scanner cs=new Scanner(System.in);
System.out.print("输入的脚的个数有误,应输入偶数,请输入脚的个数:");
leg=cs.nextInt();
 
}
//判断腿的个数是否小于零
if(leg<=0){
Scanner cs=new Scanner(System.in);
System.out.print("脚的个数输入有误,应为正偶数,请输入脚的个数:");
leg=cs.nextInt();
}
if(leg<head){
Scanner cs=new Scanner(System.in);
System.out.print("脚的个数输入有误,应大于头的个数,请输入脚的个数:");
leg=cs.nextInt();
}
}

public static void main(String[] args) {
int chicken;
int rabbit;
int head;
int leg;

System.out.print("请输入头的个数:");
Scanner sc=new Scanner(System.in);
head=sc.nextInt();
ChickenAndRabbit h=new ChickenAndRabbit();
h.Head();
System.out.print("请输入脚的个数:");
Scanner cs=new Scanner(System.in);
leg=cs.nextInt();
ChickenAndRabbit l=new ChickenAndRabbit();
l.Leg();
//引入Head方法判断
//引入Leg方法判断

//计算语句
rabbit=(leg-2*head)/2;
chicken=head-rabbit;
System.out.println("鸡的个数是:"+chicken);
System.out.println("兔的个数是:"+rabbit);
}
}


------解决方案--------------------
改了改,参考一下吧:
Java code

import java.util.*;
public class ChickenAndRabbit
{
    int head=0;
    int leg=0;
    int temp=0;
    public void Head()
    {
        //判断头的个数是否小于零    
        if(head<=0)
        {
            Scanner sc=new Scanner(System.in);
            System.out.print("头的个数输入有误,应为正整数,请输入头的个数:");
            head=sc.nextInt();
        }
    }

    public void Leg()
    {
        //判断腿的个数是否为奇数    
        if(leg%2==1)
        {    
            Scanner cs=new Scanner(System.in);
            System.out.print("输入的脚的个数有误,应输入偶数,请输入脚的个数:");
            leg=cs.nextInt();
        }
        //判断腿的个数是否小于零
        if(leg<=0)
        {    
            Scanner cs=new Scanner(System.in);
            System.out.print("脚的个数输入有误,应为正偶数,请输入脚的个数:");
            leg=cs.nextInt();
        }
        if(leg<2*head)                                    //脚数至少得是头的2倍。
        {
            Scanner cs=new Scanner(System.in);
            System.out.print("脚的个数输入有误,应大于头的个数的2倍,请输入脚的个数:");
            leg=cs.nextInt();
        }
    }

    public static void main(String[] args) 
    {
        int chicken;
        int rabbit;
        int head;
        int leg;
        System.out.print("请输入头的个数:");
        Scanner sc=new Scanner(System.in);
        head=sc.nextInt();
        ChickenAndRabbit h=new ChickenAndRabbit();
        h.head=head;                    //把此处main方法的head 赋值给对象h.
        h.Head();                    //调用对象的方法判断。
        head=h.head;                    //合格后取出敷给main方法变量head.
        System.out.print("请输入脚的个数:");
        Scanner cs=new Scanner(System.in);
        leg=cs.nextInt();
        //ChickenAndRabbit l=new ChickenAndRabbit();    //已经有了对象了,不要再建了。都用h 就行。
        h.leg=leg;                    //原理同上head. 
        h.Leg();
        leg=h.leg;
        //引入Head方法判断
        //引入Leg方法判断
        //计算语句
        rabbit=(leg-2*head)/2;
        chicken=head-rabbit;
        System.out.println("鸡的个数是:"+chicken);
        System.out.println("兔的个数是:"+rabbit);
    }
}