我必须使用用户输入一个数字的函数编写代码,然后函数验证该数字是否为prime。我很难在主要功能和" Prime"功能之间建立连接。
public static void main(String args []){
Scanner input = new Scanner(System.in);
int number;
int i;
int a;
System.out.println("Enter number");
number = input.nextInt();
for(i = 1; i < (number + 1); i++){
if(number % i==0){
a++;
}
}
System.out.println(prime(m));
}
public static boolean prime(boolean m){
boolean m = false;
if(a!=2){
return m;
}else{
return m = true;
}
}
从我对您的代码的理解中,您要求用户输入一个数字,然后检查将其从1到n分开的所有数字。如果划分的数量不等于两个,则数字为prime。
这意味着 prime函数应将整数作为其参数,在您的情况下,此整数是变量a。
您想要的接下来是 prime函数,要返回true或false 。
鉴于这些观察结果是以下代码:
public class IsPrime {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int number, i, a = 0;
System.out.println("Enter a number: ");
number = in.nextInt();
for (i = 1; i < (number + 1); i++) {
if (number % i == 0) {
a++;
}
}
System.out.println(prime(a));
}
public static boolean prime(int a) {
if (a != 2) {
return false;
}
return true;
}
}
您收到消息" m"尚未初始化,因为Java希望您在使用局部变量之前初始化本地变量(并且有充分的理由,您可以在此处阅读,也可以在这里阅读
您还应该返回布尔值而不是字符串。将您的主要方法更改为:
public static boolean prime(int number){
int i;
// a should not be a parameter but a local variable
int a = 0;
for(i=1;i<(number + 1);i++){
if(number % i==0){
a++;
}
}
// if the number of dividers is 2 (only 1 and the number itself), then its a prime number, so a==2 will give you true as result for a prime number
return (a == 2);
}
这是检查原始性的一种非常奇怪的方法。您无需计算所有因素:您只需要找到其中一个即可。尝试以下操作:
public static void main(String args []){
Scanner input = new Scanner(System.in);
System.out.println("Enter number");
int number = input.nextInt();
System.out.println(isPrime(number));
}
public static boolean isPrime(int number){
for (int i = 3; i*i <= number; i++)
{
if (number % i != 0)
return false;
}
return true;
}