int[] arr = new arr[100];这里应该改为int[] arr = new int[100];new之后跟的是元素类型,而不是数组名字;
另外看你的代码感觉好多都读不通,我也是刚弄会求素数,把我的代码发给你吧,你出现的问题应该都该在里面;- /*
- * 需求:定义功能,打印1-100之间所有的素数;
- * 素数:有且仅有两个正约数的整数,0和1不是素数;即2~i-1之间没有一个是i的约数;
- * 思路;根据素数的
- *
- * 步骤: 1、定义功能;
- * 2、标记一个整数数为素数,boolean flag = true;
- * 3、外循环遍历所有的整数;
- * 4、内循环遍历2 ~ i-1之间的所有整数
- * 5、判断是否为其约数,如果是,flag=false跳出循环 ;
- * 6、在下一次内循环开始前标记flag为true,继续判断;
- * 7、如果flag = true,输出该数;
- *
- flag是一个布尔变量,定义a也行,默认值为false,定了变量要先赋值后执行;
- 外循环遍历所有的数i
- 进入内循环对每一个数进行是否是素数判断,如果是(i%j == 0),i不是素数,
- 内循环里面设为false,表示不是素数;
- 如果i不是素数,就会将标记flag赋值为false,这样下面打印语句就不会执行,重新进行外循环,
- 但必须要在将标记flag改写为true,才可以对下次的判断为素数时执行打印语句
- 如果这个数是一个素数,就通过if对flag的判断,打印这个素数i。
- */
- public class SuShu {
- /*
- * 需求:定义功能,输出打印1 ~ 100之间所有的素数
- * 思路: 1、定义一个判断标记,如果为true表示这个数是素数;
- * 2、嵌套for循环遍历所有的数
- * 3、判断j是否为ide约数;
- *
- * 步骤:1、定义功能;
- * 2、定义标记flag,true表示为素数,false不是;
- * 3、外循环遍历1 ~ 100之间所有的数i;
- * 4、内循环遍历2 ~ 99之间的数j是否为i的约数
- * 5、如果不是,标记flag为false,跳出内循环,继续下一次外循环;
- * 6、重新赋值flag为true,继续下一次内循环判断j是否为i的约数;
- * 7、如果是flag,输出打印i*/
- public static void main(String[] args) {
- printSuShu(100); //调用方法;
- // int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12,13,14};
- // printSuShu_1(arr);
- }
-
- public static void printSuShu(int x) { //定义功能;
-
- int count = 0;
- boolean flag = true; //假设i为素数,即boolean flag = true;
- for(int i = 2;i <= x;i++) { //外循环遍历1 ~ x之间的数i,判断i是否为素数
- flag = true;
- for(int j = 2;j <= i - 1;j++) { //内循环遍历2 ~ i-1之间的数j,如果j为i的约数表示不是素数;
- // for(int j= 2;j <= Math.sqrt(i);j++) { i - 1可以换成Math.sqrt(i);如果在i开平方后的根之
- // 前如果没有约数的话就不会再有约数了,更有效率,优化代码;
- if(i % j == 0) {
- flag = false; //把flag值改为false,表示不是素数;
- break; //跳出内循环,继续外循环判断下一个数i;
- }
- }
- if(flag) { //如果确实为一个素数,输出打印i;
- System.out.println(i);
- count++;
- }
- }
- System.out.println("素数出现的个数" + count);
- }
-
- public static void printSuShu_1(int[] arr) { //打印数组中的素数;
- boolean flag = true;
- for (int i = 0; i < arr.length; i++) { //外循环从0角标开始遍历数组,获取每一个元素i;
- flag = true;
- for (int j = 1; j < i-1; j++) { //内循环遍历1 ~ i-1之间的所以元素;
- if (arr[i] % arr[j] == 0 ) { //如果j角标元素是i角标元素
- flag = false;
- break;
- }
- }
- if (flag && arr[i]>1) { //如果这个数是素数,并且值大于1;
- System.out.println(arr[i]); //输出打印这个i角标上的元素
- }
- }
- }
- }
复制代码 |