简体   繁体   English

需要从输入文件中的最小值最大值中找到素数和完美整数

[英]Need to find prime and perfect integers from min max values in an input file

This is a homework question.这是一道作业题。

The code compiles, but in the test case, 2 is outputting as perfect, which it is not.代码可以编译,但在测试用例中,2 的输出是完美的,但事实并非如此。

I cannot use an array.我不能使用数组。 I cannot use Math.min() or Math.max() .我不能使用Math.min()Math.max() Purely conditionals and loops.纯粹的条件和循环。

My professor says I need to only test for divisors up to and including n/2 but when I do that, I still get the 2 as a perfect number.我的教授说我只需要测试最大和包括 n/2 的除数,但是当我这样做时,我仍然得到 2 作为一个完美的数字。

Any help would be appreciated.任何帮助,将不胜感激。

// Project2.java

import java.io.*; // BufferedReader
import java.util.*; // Scanner

public class Project2
{
  public static void main (String args[]) throws Exception
  {
    // ALWAYS TEST FIRST TO VERIFY USER PUT REQUIRED CMD ARGS
    if (args.length < 3)
    {
      System.out.println("\nusage: C:\\> java Project2 <input file name> <lo>  <hi>\n\n");
      // i.e. C:\> java Project2 P2input.txt 1 30
      System.exit(0);
    }
    String infileName = args[0]; // i.e. L2input.txt
    int lo = Integer.parseInt( args[1] );   // i.e. 1
    int hi = Integer.parseInt( args[2] );   // i.e. 30

    // STEP #1: OPEN THE INPUT FILE AND COMPUTE THE MIN AND MAX. NO OUTPUT STATMENTS ALLOWED
    Scanner infile = new Scanner( new File(infileName) );
    int min,max;
    min=max=infile.nextInt(); // WE ASSUME INPUT FILE HAS AT LEAST ONE VALUE
    while ( infile.hasNextInt() )
    {
      // YOUR CODE HERE FIND THE MIN AND MAX VALUES OF THE FILE
      // USING THE LEAST POSSIBLE NUMBER OF COMPARISONS
      // ASSIGN CORRECT VALUES INTO min & max INTHIS LOOP.
      // MY CODE BELOW WILL FORMAT THEM TO THE SCREEN
      // DO NOT WRITE ANY OUTPUT TO THE SCREEN

      int number = infile.nextInt();

      if ( number < min )
      {
        min = number;
      }
      else if ( number > max )
      {
        max = number;
      }
    }



    System.out.format("min: %d max: %d\n",min,max); // DO NOT REMOVE OR MODIFY IN ANY WAY


    // STEP #2: DO NOT MODIFY THIS BLOCK
    // TEST EVERY NUMBER BETWEEN LO AND HI INCLUSIVE FOR
    // BEING PRIME AND/OR BEING PERFECT
    for ( int i=lo ; i<=hi ; ++i)
    {
      System.out.print( i );
      if ( isPrime(i) ) System.out.print( " prime ");
      if ( isPerfect(i) ) System.out.print( " perfect ");
      System.out.println();
    }
  } // END MAIN

  // *************** YOU FILL IN THE METHODS BELOW **********************

  // RETURNs true if and only if the number passed in is perfect
  static boolean isPerfect( int n )
  {
    int sum = 0;
    for(int i = 1; i <= n/2; i ++)
    {
      if(n%i == 0)
      {
        sum += i;
      }
    }
    if (sum == n)
    {
      return true;
    }
    else
    {
      return false;
    }
    // (just to make it compile) YOU CHANGE AS NEEDED
  }
  // RETURNs true if and only if the number passed in is prime
  static boolean isPrime( int n )
  {
    if (n < 3)
    {
      return false;
    }

    for(int i = 2; i <= n/2; i++)
    {
      if(n%i == 0)
        {
          return false;
        }
      }
      return true;

  }// (just to make it compile) YOU CHANGE AS NEEDED
} 

OK, I found a bug, although it's not quite the bug you described.好的,我发现了一个错误,尽管它不是您描述的错误。

static boolean isPrime( int n )
{
    if (n < 3)
    {
      return false;
    }

This will incorrectly list 2 as not prime, because it's less than 3.这会错误地将 2 列为非素数,因为它小于 3。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM