构造生成数字1-100的java代码并仅显示复合整数

时间:2015-01-01 15:39:36

标签: java

这是我在编写一个java应用程序时的尝试(和失败),该应用程序显示仅在1到100之间的整数范围内复合的整数

  

//打印出1到100之间复合数字的java应用程序

>//public class printcomposites{

>//main exceutes java application
>public static void main(String[] args){
>//loop to iterate all candidate values from 1 through 100
>for( int i = 1 ; i <=99 ; i++ )
>{


> // a nested loop to define the divisors of the candidate values
>// what should ?? be for an efficient program?
>for ( int j = 1 ; j <= i ; j++ )``
>{



> // a statement to identify composite numbers from the candidate value
>if ( i%j==0 )
>{
>// collect or display the identified composite numbers

>j=j+i;
>System.out.printf("%d\t",j);

>}//end if

> }//end 

我的代码显示1-100中的所有整数,而不是仅为复合整数的整数。我哪里出错了

2 个答案:

答案 0 :(得分:1)

一些事情:

  • 你的j从1开始,每个数字都可以被1整除。
  • 条件j&lt; = i,每个数字都可以自行整除。
  • 一旦发现该数字可以被其他数字整除,那么你应该停止进一步处理并从内循环中断。
  • 你已经知道2是素数所以要排除它并从3开始你的i循环。

你应该有类似的东西:

 for (int i = 3; i <= 99; i++) {
        for (int j = 2; j <= i/2; j++) {
            if (i % j == 0) {
                System.out.println(i);
                break;
            }// end if
        }
 }

答案 1 :(得分:0)

这里有一些问题。

  1. 您错过了一些小括号,但这可能是一个复制错误
  2. 你正在递增j ...... for循环为你做了
  3. 你正在打印j:我是有问题的数字,j只是一种确定它的方法
  4. 你正在检查1的分数和数字本身,这将永远是真的
  5. 这是非常低效的...一旦你确定了复合,关闭循环
  6. 以下是它的样子:

    public static void main(String[] args){
    
        for( int i = 2 ; i <=99 ; i++ ) //iterate 1 - 99; 2 is prime
        {
            for ( int j = 2 ; j < i ; j++ ) //iterate 2 - potential composite EXCLUSIVELY; every number can be divided by one and itself
            {
                if (i%j==0 ) //test to see if the given number less than i is a factor of i
                {
                    System.out.println(i); //i is a composite, because it has a factor, j. Print it.
                    break; //we already know it's a composite, no need to keep testing
                }
    
            }
        }
    }