我正在尝试创建一个用户输入2个数字的程序,然后程序会在这个空白中给出tau数。
我认为循环中有一个错误,但我无法理解它在哪里。
import java.util.Scanner;
public class tauNumber {
public static void main(String [] args){
int start=0,stop=0,count=0;
Scanner input =new Scanner(System.in);
System.out.println("Please enter first number: ");
start=input.nextInt();
System.out.println("Please enter last number: ");
stop=input.nextInt();
for(int i=0+start;i<=stop;i++){
for(int j=1;j<=start;j++){
if(i%j==0){
count++;
}
}
if(start/count==0){
System.out.println(i+" is a tau number" );
}
}
}
}
答案 0 :(得分:0)
不应该说“tau number”,而应该像@Tunaki所指出的那样将它称为refactorable number。
我建议您将代码分解为函数,以便更好地了解最新情况,我认为这正是您所需要的:
import java.util.Scanner;
class TauNumber {
public static void main(String[] args){
Scanner input =new Scanner(System.in);
System.out.println("Please enter first number: ");
int start=input.nextInt();
System.out.println("Please enter last number: ");
int stop=input.nextInt();
for(int i=start+1; i<stop; i++){
if(refractorable(i)){
System.out.println("Found tau number: "+ i);
break;
}
}
}
public static boolean refractorable(int number){
if(sumDivisors(number) == 0) return false;
if(number % sumDivisors(number) == 0){
return true;
} else {
return false;
}
}
public static int sumDivisors(int number){
int sum = 0;
for(int i=1; i<=number; i++){
if(number % i == 0){
sum++;
}
}
return sum;
}
}
注意:我还想指出,当你指定“缺口”时,你的意思是什么?我把它作为start < x < stop
,因为那是差距,但肯定是start < x <= stop
。
答案 1 :(得分:0)
代码中的错误是您检查start/count
的商是否为0
。要检查start
是否可以count
整除,您应该检查余数是否为0
。因此,您应该使用模数(%
)运算符而不是除法(/
)运算符。
下面是一个函数的代码,用于检查其参数是否为tau数。
private static boolean isTau(int tau){
int count = 0;
for(int i=1; i<=tau; i++){
if(tau % i == 0)
count++;
}
return (tau % count == 0) ; //returns true if 'tau' is a tau number
}
在main方法中,您可以使用此函数:
for(int i=start; i<=stop; i++){
if(isTau(i))
System.out.println(i+" is a tau number");
}