初学者的初级问题,望能给予指点

dealdream 2012-10-18 11:46:14
今天看了一个关于循环语法应用的举例,要求设计一个小程序,算出101~200之间的质数,讲义中给出的代码是:
public class T{
public static void main(String[] args){
for(int i=101;i<200;i+=2){
boolean f = true;
for(int j=2;j<i;j++){
if(i%j==0){
f=false;
break;
}
}
if(!f) {continue;}
System.out.println(i);
}
}
}
这样能算出来,但是小弟有点懵,不知道在第二个for循环的时候应该怎么处理?怎么去思考这个问题,布尔型数据在什么时候需要?什么时候不需要?
大家有没有一个更容易理解的代码,本人比较笨,反应慢。还希望各位能指点指点?
我写的代码如下,一直运行出来都是这些数之间的奇数,帮我看看为什么?谢谢!!!!!!!!!!!!
public class T{
public static void main(String[] args){
//只能被自身和1整除的数为质数;如a不能被a和1以外的任何数整除,1<x<a的数
int i;
boolean f = true;
for(i=101;i<200;i+=2) {
for(int j=2;j<i;j++) {
if(i%j==0) {f=false;break;}
else if(i%j!=0) { f=true;}
}
if(f=true){System.out.println(i);}
}
}
}



...全文
324 15 打赏 收藏 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hy519 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
请问下第一个FOR循环里为什么是i+=2好像i++也可以啊!求解。。。。
因为从101起,如果i++话就会遇到很多偶数,偶数肯定不会是质数,所以在奇数里面找质数。
[/Quote]
谢谢6喽的回复明白了!
GOon_star 2012-10-21
  • 打赏
  • 举报
回复
java基础你需要好好看看再,用来做比较用是要用==的 ,绝对相等需要用===的。
boolean类型的你为什么要用=比较呢?需要吗?
dealdream 2012-10-20
  • 打赏
  • 举报
回复
非常感谢您的回复!THX~~平方根可能不是整数,是不是要强制转化为int类型的数据?[Quote=引用 11 楼 的回复:]

1、首先质数的意思是:公约数只有1和它本身。
2、所以本题的思路是:从2开始,依次向后,整除原数,如果有能整除尽的,说明它的公约数除了1和本身外还有其它的,也就是第二个for循环的作用。

你发的代码有一丝不对,也不能说不对吧,不太好,第二个for循环:for(int j=2;j<i;j++)
应该写成for(int j=2;j<Math.sqrt(i);j++),不用一直到原数,到它的……
[/Quote]
依琳小师妹 2012-10-20
  • 打赏
  • 举报
回复
1、首先质数的意思是:公约数只有1和它本身。
2、所以本题的思路是:从2开始,依次向后,整除原数,如果有能整除尽的,说明它的公约数除了1和本身外还有其它的,也就是第二个for循环的作用。

你发的代码有一丝不对,也不能说不对吧,不太好,第二个for循环:for(int j=2;j<i;j++)
应该写成for(int j=2;j<Math.sqrt(i);j++),不用一直到原数,到它的平方根就行了。

至于bool值,这个很简单吧,你先理解一下质数的含义,然后顺着思路一下子就出来了。
不懂再问吧。
[Quote=引用楼主 的回复:]
今天看了一个关于循环语法应用的举例,要求设计一个小程序,算出101~200之间的质数,讲义中给出的代码是:
public class T{
public static void main(String[] args){
for(int i=101;i<200;i+=2){
boolean f = true;
for(int j=2;j<i;j++){
……
[/Quote]
lijunno192 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:
楼主的算法是对的,只可惜这句:
if(f=true){System.out.println(i);}
那个if里的比较是错的,应该用“==”,而不是“=”。
按楼主那样写,无论f是true或false,print都执行,所以所有数都输出了。
您好!我按照您的提示运行了下,确实正确了,但就是不理解为什么if(f=true){System.out.println(……
[/Quote]
if(f=true){System.out.print(i+" ");} 中f=true是赋值表达式,不能做任何判断,所以后面花括号的语句在你的第一个for循环下都会实现,也就是说你的第二个for循环根本是无用代码。
ld191474639 2012-10-19
  • 打赏
  • 举报
回复
刚看错了
int startNum = 101;
int endNum = 200;

int num = startNum;
while (num <= endNum) {
boolean flag = true;
int index = 2;
while(index<=endNum/2){
if(num % index == 0){
flag = false;
break;
}
index++;
}
if(flag){
System.out.print(num+"\t");
}
num++;
}
mengmingtao 2012-10-19
  • 打赏
  • 举报
回复
if(f=true){System.out.println(i);}

改为
if(!f){...}
已婚奥特曼 2012-10-19
  • 打赏
  • 举报
回复
第二个FOR循环表示,取J=2,然后J递增,一直增到i<j如果i除以j=0,表示这i可以除这个数,得出i不是质数,break一下,跳出此次循环(第二个循环)
其实这种简单的业务需求可以用很多种代码来完成,每个人的思维方式不一样.
至于LZ你的代码你的第二个for循环里,直接用第一个J就运行了if(101/2!=0){f=true},然后就打印了.所有的奇数除以2都不等于0,所以都打印出来了.
ld191474639 2012-10-19
  • 打赏
  • 举报
回复
要求设计一个小程序,算出101~200之间的质数
public class testmap{
public static void main(String[] args){
for(int i=101;i<200;i++){
if(i%2!=0){
System.out.println("质数"+i);
}
}


}
}
xiaoya13144111 2012-10-19
  • 打赏
  • 举报
回复
for(int i=101;i<=200;i+=2){

for(int j=2;j<i;j++){
if(i%j==0){

break;
}

}
System.out.println(i);
}
dealdream 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
请问下第一个FOR循环里为什么是i+=2好像i++也可以啊!求解。。。。
[/Quote]因为从101起,如果i++话就会遇到很多偶数,偶数肯定不会是质数,所以在奇数里面找质数。
dealdream 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
楼主的算法是对的,只可惜这句:
if(f=true){System.out.println(i);}
那个if里的比较是错的,应该用“==”,而不是“=”。
按楼主那样写,无论f是true或false,print都执行,所以所有数都输出了。
[/Quote]您好!我按照您的提示运行了下,确实正确了,但就是不理解为什么if(f=true){System.out.println(i);} 中的“=”换成“==”就行了。还望您能帮我解答,谢谢!!!
hy519 2012-10-19
  • 打赏
  • 举报
回复
请问下第一个FOR循环里为什么是i+=2好像i++也可以啊!求解。。。。
zyx___zyx 2012-10-19
  • 打赏
  • 举报
回复
楼主的算法是对的,只可惜这句:
if(f=true){System.out.println(i);}
那个if里的比较是错的,应该用“==”,而不是“=”。
按楼主那样写,无论f是true或false,print都执行,所以所有数都输出了。
打开链接下载源码: https://pan.quark.cn/s/e18529987bb9 ### ETS中文教程:KNX施耐德智能家居 #### 知识点一:ETS软件概述与启动 ETS(Engineering Tool Software)是由施耐德电气研发的一款专业设计工具,其核心功能在于构建和配置基于KNX标准的智能家居及楼宇自动化系统。KNX代表一种国际公认的开放式标准,该标准在楼宇自动化领域得到广泛应用,其目的是实现不同品牌设备之间的互联互通。 **软件启动方法**:ETS软件可以通过双击其图标来启动,或者从开始菜单中选择“File”->“New Project”,亦或直接使用Ctrl+N快捷键来启动该软件。 #### 知识点二:工程项目创建 在启动新的工程项目时,需要遵循以下流程: 1. **项目命名**:推荐使用数字与字母的组合来命名项目,例如“Officebuildings”,这样的命名方式有助于日后的管理和识别。 2. **构建建筑物模型**:在“Buildings/Functions”部分添加建筑物,自定义其名称(例如“mg”),并确认创建操作。 3. **添加房间**:针对每一个建筑物,可以进一步添加房间,同样地,为房间自定义名称(如“1F”),以此来构建完整的建筑模型。 #### 知识点三:设备加载与配置 设备加载是ETS软件中的核心环节,其作用在于将实际的智能设备(包括开关、传感器等)整合到项目中: 1. **设备加载过程**:在目标房间处进行右键点击,选择“Add Devices”,随后通过“Product Finder”对话框选择合适的制造商和产品系列,以此来加载所需的设备类型。 2. **地址分配**:在设备加载完成后,应手动为其分配独...
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 在客户端编程中,有时我们需要对用户上传的Excel文件内容进行管理,并将其转化为JSON格式以便进行后续操作或与服务器端进行数据交换。这一过程通常包含文件读取、数据解析以及格式转换等步骤。以下是一些关于如何运用JavaScript达成这一功能的核心要点: 1. **File API**:在当前版本的浏览器中,我们可以借助File API来获取用户上传的文件。`FileReader`对象提供了异步获取文件内容的方法,例如`readAsArrayBuffer()`,用于读取文件内容。 2. **XLSX库**:由于浏览器自带的API不直接支持Excel文件的解析,我们需要借助第三方库。其中,`xlsx`库是一个广受欢迎的选择,它能解析多种Excel文件格式(如XLS、XLSX、CSV等)并提供便捷的数据操作接口。 3. **获取Excel文件**:借助`xlsx`库,我们首先需要将File API获取到的`ArrayBuffer`转换为可解析的格式。例如,可以调用`XLSX.read(arrayBuffer, {type: buffer})`进行格式转换。 4. **解析工作表内容**:`xlsx`库解析完成后,会返回一个对象,其中包含了所有工作表的信息。我们可以通过`XLSX.utils.sheet_to_json(worksheet)`方法将单个工作表转换为二维数组,这类似于Excel中的表格数据。 5. **转化为JSON对象**:二维数组可以很方便地转化为JSON对象。遍历数组,每行数据作为JSON对象的一个属性,属性名为单元格的列名,属性值为单元格的值。可以使用`Arr...

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧