我应该创建一个类PrimeNumberGenerator,它有一个方法nextPrime,它将打印出所有素数,直到用户输入的数字.

例)

Enter a Number:

20

2

3

5

7

11

13

17

19

我们的老师告诉我们,我们应该使用嵌套的for循环.我试过了,但是当我试图制作内部(嵌套)循环时,我真的很困惑.

这是我的代码:

(我稍后会做一个测试课)

public class PrimeGenerator {

private int num;

boolean isPrime;

public PrimeGenerator(int n)

{

num = n;

}

public int nextPrime (int num)

{

for (int i=2; i < num; i++) // The first prime number is 2 and the prime numbers only have to go up to a number the user inputs.

{

for (int j = 3; j<=i/2; j+=2) // The next prime number is 3 and I attempted to loop through to get the next odd number.

{

if (num % i == 0) //if the number (upper limit) mod a "prime number" is 0, then that means that number is not really "prime" after all.

{

break;

}

}

}

return num;

}

}

解决方法:

这里有两个你忘了问的问题:

>为什么嵌套循环会使一切变得如此复杂?

>我能做些什么才能让事情再次复杂化?

让我们一起玩你实际问的问题,然后回答前两个问题.

您想要做的事情可能如下所述:

对于每个数字,1-n,其中n由用户输入,如果它是素数则打印它.

好的,让我们在这里写下伪代码/逻辑.

它看起来像Java,但事实并非如此.这只是为了传达我们的目标:

int largestNumber = readIntegerFromKeyboard();

for all ints i from 1 to largestNumber {

if(isPrime(i)) {

println(i);

}

}

所以,让我们这样做!但首先,我们需要一份清单,列出我们需要做的所有事情:

>从键盘读取整数

>循环数字

>检查数字是否为素数

>打印素数(换行)

让我们先做两件容易的事.读取输入并设置循环:

Scanner keyboard = new Scanner(System.in);

int largestNumber = keyboard.nextInt();

for(int i = 1; i <= largestNumber; ++i) {

if(isPrime(i)) {

System.out.println(i);

}

}

keyboard.close();

好的,这似乎很简单.到目前为止,这里的一切都有意义.这很容易理解逻辑.

然而,现在,当我们用实际逻辑替换isPrime时,一切都将变得混乱且难以阅读.

因此,让我们尽可能简单地理解这段代码.我们将不使用任何技巧来加速代码.可读性和正确性是我们唯一关心的两件事.我们将使用模运算符来检查某些东西是否可以均匀分割. Modulo就像整数除法,除了它返回余数而不是结果.所以7/2 = 2. 7%2 = 1,因为剩下一个.

Scanner keyboard = new Scanner(System.in);

int largestNumber = keyboard.nextInt();

for(int i = 1; i <= largestNumber; ++i) {

// checks if the number is a prime or not

boolean isPrime = true;

for(int check = 2; check < i; ++check) {

if(i % check == 0) {

isPrime = false;

}

}

if(isPrime) {

System.out.println(i);

}

}

所以好消息是,这是有效的.

坏消息是,这比必要的阅读更难.我们在这里做的不是很多.当我写这篇文章时,我犯了几个愚蠢的错误,混淆了变量.也许我很蠢.所以也许我应该在那种情况下写出愚蠢的代码. ;)另一方面,你不是傻瓜.但是你可能和我一起工作,这是愚蠢的,所以你必须自己编写愚蠢的代码,这样你才能有效地与我合作.

最大的问题是我们在另一个循环的中间有这个大规模的循环.这就是让我失望的原因.我提到了错误的循环变量.但为什么我们需要循环中的循环?读起来不是很舒服:

if(isPrime(i)) {

System.out.println(i);

}

而不是整个混乱?你的教授指出了嵌套循环.但是它让你失望了.相反,只需编写isPrime方法即可.事实是,对于我曾经遇到的每一个嵌套循环实例都是如此.所以让我们看看它的外观如何:

class Homework {

public static void main(String[] args) {

Scanner keyboard = new Scanner(System.in);

int largestNumber = keyboard.nextInt();

for(int i = 1; i <= largestNumber; ++i) {

if(isPrime(i)) {

System.out.println(i);

}

}

keyboard.close();

}

/**

* Checks is a positive integer is a prime number

*/

public static boolean isPrime(int number) {

for(int check = 2; check < number; ++check) {

if(number % check == 0) {

return false;

}

}

return true;

}

}

这对我来说更容易阅读.不是因为逻辑变得容易,而是因为我唯一需要关心的是:

>检查所有数字并打印正确的数字,或

>如何检查数字是否为素数.

由于这两个独立的东西现在是分开的,你可以立刻想一想.高兴,因为你刚刚做了一个适当的抽象.这使您的代码更容易理解,因为它将这两个问题分开.这是制作大型项目的关键方式.你采取困难的事情并自己做.然后你可以自己测试它们,并自己使用它们.

(现在我只需要等待回答你没有明确要求的问题的downvotes ……)

标签:java,primes

来源: https://codeday.me/bug/20191007/1866178.html

java 生成素数_java – 素数生成器逻辑相关推荐

  1. java 生成随机数_Java 生成随机数的 N 种方法

    原标题:Java 生成随机数的 N 种方法 www.baeldung.com/java-generating-random-numbers 1.引言 本文将探讨用 Java 生成随机数的不同方法. 2 ...

  2. java 输出素数_java 素数(按要求输出)

    package number; import java.util.Scanner; public class Prime { public static void main(String[] args ...

  3. java web随机生成四则运算_java四则运算生成器

    题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除 ...

  4. java 生成缩略图_Java实现等比例缩略图

    1.简介:Web应用为上传图片生成缩略图是常见的基本功能,通过缩略图生成提高了信息浏览时的性能,在保证用户使用体验的同时减少了数据传输量. 2.实现图片等比例缩略图生成,方式及相关工具介绍: (1)T ...

  5. java生成密码_java生成密码生成 | 学步园

    一.根据当前日期生成MD5加密密码 package com.test; import java.security.MessageDigest; import java.text.SimpleDateF ...

  6. java 生成拼音_java工具-常用汉语转拼音库Pinyin4j 、tinypinyin、JPinyin

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换,拼音输出格式可以定制,在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,这时候Pinyin4j就可以派上用场 有自己私服的可以 ...

  7. java生成条码_Java生成商品条形码

    之前没有使用过这个,现在使用JBarcode生成商品条形码,工作之前的准备工作: Eclipse: Eclipse Java EE IDE for Web Developers. Version: H ...

  8. java生成圆_java工具类-java实现 生成圆头像

    1.创建RoundHeadImgUtils工具类 package com.mrd.utils; import javax.imageio.ImageIO; import java.awt.*; imp ...

  9. java生成表_java生成表格图表

    项目有个需求是生成上图的表格图表,本来excel很容易生成上边的表格图,但是java poi不支持在服务器端把excel表格导出成图片,在没有找到合适的工具库下,用java 2d实现同样图表. 这个表 ...

最新文章

  1. 9.QML Qt Quick Controls 2中常用的界面形式——并排式界面(SwipeView)
  2. 卧槽?用 Python 还能玩 Git?
  3. linux 如何查看应用程序进程号、端口
  4. docker部署resin应用
  5. iOS项目开发优秀文章汇总
  6. (转)linux获取/查看本机出口ip
  7. Python(set/list/dict/tuple)
  8. Kubernetes详解(二十四)——Deployment控制器更新实战与查看
  9. WCF把书读薄(3)——数据契约、消息契约与错误契约
  10. sdX和hdX含义及其他安装Linux OS的总结
  11. 基于微信小程序的毕业设计题目(33)PHP校园失物招领小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
  12. Can‘t update 分支名 has no tracked branch
  13. Spring Boot 实现通用 Auth 认证的 4 种方式!
  14. 基于Kotlin、ViewModel、LiveData和LifeCycle开发的Readhub客户端
  15. jQuery事件绑定与解绑
  16. 如何正确使用数据可视化图表?
  17. 做电商直播绝不能忽视的事:主播人设和账号定位
  18. 移动的帝国:日本移动互联网兴衰启示录
  19. 服务器系统显示白屏,服务器远程显示白屏
  20. 哪些职业适合转行产品经理?

热门文章

  1. Android手机常见隐藏代码
  2. 解读百度AutoDL:打破SOTA纪录的神经架构搜索是如何炼成的
  3. Mysql多实例实施文档
  4. [CareerCup][Google Interview] Find kth number in a BST
  5. 为什么Hadoop将一定会是分布式计算的未来?
  6. 微软发布紧急更新,修复了多个 Windows Server 身份验证问题
  7. 2021北京网络安全大会议程及直播观看指南
  8. 模拟最大黑客组织 FIN6 的行为,MITRE 免费助力网络安全防御
  9. 一年太久,研究员决定不等补丁直接披露 Safari 0day 详情
  10. 《Java高并发程序设计》读书笔记 第二章 并行程序基础