java编译时出错了

来源:百度知道 编辑:UC知道 时间:2024/05/31 07:39:09
import java.util.Scanner;

public class text{
public static void main(String[] args){
Scanner a = new Scanner(System.in);
long b = a.nextLong();
ShuZi Dashu = new ShuZi(b);
Dashu.Jishu();

}
}
class ShuZi{

public void Jishu(long n){
int i=0;
int l=0;
int m=0;
while(n!=0){
if(n%10==0){
i++;
}
else if(n%10%2==0){

l++;
}
else {

m++;

}
n/=10;
}
System.out.println("奇数"+m);
System.out.println("偶数"+l);
System.out.println("O"+i);
}

}

这是怎么了??
高手帮帮忙

你的ShuZi类根本就没有有参的构造方法,
你这句ShuZi Dashu = new ShuZi(b);意义何在?
而public void Jishu(long n)这个方法有一个long型的参数,你在调用他的时候却没有给它传入参数,这当然是不行的了.

这2句应该是这样:
ShuZi Dashu = new ShuZi();
Dashu.Jishu(b);

假如你没有自己定义构造函数的话,系统会默认一个无参数的构造函数,即
public ShuZi(){}
构造对象的时候在分配内存后系统会自动调用构造方法来构造对象,你程序中并没有定义public ShuZi(long a){}结构的构造函数,但你又调用他来构造ShuZi对象,当然会报错。
ShuZi Dashu = new ShuZi();
Dashu.Jishu(b);

简单点:
把这句ShuZi Dashu = new ShuZi(b);
Dashu.Jishu();
改为
ShuZi Dashu = new ShuZi();
Dashu.Jishu(b);
原因是b是你ShuZi的实例Dashu中的Jishu方法中的一个参数 而并非是你的构造函数里面的