【问题标题】:Prime Numbers Assistance质数援助
【发布时间】:2014-11-16 21:05:17
【问题描述】:

我必须写一段代码,这就是我目前所拥有的:

素数是一个只能被它自己和 I 整除的数。例如, 数字 5 是素数,因为它只能被 1 和 5 整除。然而,数字 6, 不是素数,因为它可以被 1、2、3 和 6 整除。 编写一个名为 isPrime 的方法,它接受一个整数作为参数,如果 参数是素数,否则为假。完整地演示该方法 程序。

这是目前为止的代码:

package isprime;
import java.util.Scanner;

public class IsPrime {

    public static void main(String[] args) {
        Scanner userInput = new Scanner(System.in);        
        System.out.println("Write a number.");
        int num = userInput.nextInt();
    }

    public static boolean isPrime(int num) {
        int isPrime = num % num; 

        if (isPrime !=0 || isPrime != 1)
            return false;
        else
           return true;
    }
}

现在的问题是我不太了解布尔表达式的工作原理,所以这就是为什么我将内部方法设为布尔值,但它不会在内部方法中选择用户编号响应。这就是我卡住的地方。此外,还有一条消息说 if 是多余的?任何人都可以帮助获得答案,而不是答案本身吗?从长远来看,我不会学习如何做到这一点。

第 2 部分:

现在我必须将这些质数放入一个文件中。我知道我必须使用 PrintWriter,但我不确定将它放在哪里。另外,如何创建文件,使用 PrintWriter fileName = new PrintWriter("PrimeNumbers.txt");

这是创建的新代码:

package isprime_final;
import java.io.PrintWriter;
import java.util.Scanner;

public class IsPrime_Final
{
public static void main(String args[]){ 
Scanner fileName = new Scanner(System.in);

System.out.println("Name the file for Prime Number list.");
String primeList = fileName.nextLine();

    for (int isPrime = 0; isPrime <= 100; isPrime++) {
    if (isPrime(isPrime)) {
            PrintWriter PrimeNumbers = new PrintWriter(System.out);
    PrintWriter.println(isPrime);

    }
}
PrintWriter.close();
}
 public static boolean isPrime(int prime) {

if ((prime & 1) == 0) {
    if (prime == 2) { 
 return true;
    } else {
    return false;
    }
}
for (int i = 3; (i * i) <= prime; i += 2) {
    if ((prime % i) == 0) {
    return false;
    }
}
return prime != 1;
}
}

【问题讨论】:

标签: java primes


【解决方案1】:
int isPrime = num % num; 

这并不能完成任何事情。根据定义,num % num 始终为 0(请记住,a % ba 除以 b 时的余数)。

if (isPrime !=0 || isPrime != 1)

这也不会完成任何事情,因为表达式始终为真。您是在问isPrime 是否不同于 0, 是否不同于 1。可能存在三种情况:

  1. isPrime 为 0。isPrime != 0 为假,isPrime != 1 为真,整个表达式为真。
  2. isPrime 为 1。isPrime != 0 为真,isPrime != 1 为假,整个表达式为真。
  3. isPrime 是任何其他值。 isPrime != 0 为真,isPrime != 1 为真,整个表达式为真。

首先,您需要一个 循环 来寻找除数。如果你能在2num-1 之间找到一个除数,那么num % divisor == 0,那么num 不是素数。如果找不到,那就是素数。

【讨论】:

    【解决方案2】:

    您没有从 main 方法的任何地方调用布尔方法 isPrime。阅读用户的回复后,您需要先调用它。其次,你在做

     num%num
    

    这总是会给你真实的。所以它永远不会进入错误状态。

    希望这能有所帮助

    学习愉快:)

    【讨论】:

    • 你的意思是num % num 总是给你零。但即使没有,isPrime !=0 || isPrime != 1 也会是真的,因为没有数字可以同时是 ==0==1
    • 我没有看到它不会给我 0 的情况。唯一的例外是零,我们应该始终检查条件
    【解决方案3】:

    质数定义为as a number only divisible by itself and 1

    要确定一个数 N 是否为素数,一种简单的方法是检查该数是否可被 1 到 N 之间的任何数整除。

    public static boolean isPrime (int num) {
        for (int i=2; i<num; i++)
            if (num % i == 0) // num is divisible by i
                return false; // num is not prime.
        return true; // because num passed all tests, num is prime.
    }
    

    【讨论】:

    • 这可以通过将条件减少到i &lt;= sqrt(num)来缩短,你可能还应该确保num &gt;= 2
    • 当然!这就是为什么我说这是一种幼稚的方法,适合初学者
    • 您可能会收到不兼容类型错误的原因是因为您可能将“isPrime(num)”分配给 num,它是 int 类型而不是 boolean。我不能肯定地说,因为在您的原始帖子中您没有调用 isPrime
    • 所以我现在写的代码,我需要能够把它放在一个文件中。我在使用 PrintWriter 时收到一条错误消息,我不确定是否要放置它来打印文件名。究竟如何打印文件?
    猜你喜欢
    • 1970-01-01
    • 2019-12-14
    • 2012-05-04
    • 1970-01-01
    • 2022-06-11
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    相关资源
    最近更新 更多