Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要从输入文件中的最小-最大值中查找素数和完美整数_Java - Fatal编程技术网

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

Java 需要从输入文件中的最小-最大值中查找素数和完美整数,java,Java,这是一个家庭作业问题 代码可以编译,但在测试用例中,2的输出是完美的,而事实并非如此 我不能使用数组。我不能使用Math.min()或Math.max()。纯粹的条件和循环 我的教授说我只需要测试n/2以下的除数,但当我这样做时,我仍然得到2作为一个完美数 任何帮助都将不胜感激 // Project2.java import java.io.*; // BufferedReader import java.util.*; // Scanner public class Project2 {

这是一个家庭作业问题

代码可以编译,但在测试用例中,2的输出是完美的,而事实并非如此

我不能使用数组。我不能使用
Math.min()
Math.max()
。纯粹的条件和循环

我的教授说我只需要测试n/2以下的除数,但当我这样做时,我仍然得到2作为一个完美数

任何帮助都将不胜感激

// 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
} 
//Project2.java
导入java.io.*;//缓冲区读取
导入java.util.*;//扫描仪
公共类项目2
{
公共静态void main(字符串args[])引发异常
{
//始终先测试以验证用户输入所需的CMD ARGS
如果(参数长度<3)
{
System.out.println(“\n用法:C:\\>JavaProject2\n\n”);
//即C:\>java Project2 P2input.txt 1 30
系统出口(0);
}
字符串infileName=args[0];//即L2input.txt
int lo=Integer.parseInt(args[1]);//即1
int hi=Integer.parseInt(args[2]);//即30
//步骤#1:打开输入文件并计算最小值和最大值。不允许输出状态
扫描仪内嵌=新扫描仪(新文件(内嵌名));
最小整数,最大整数;
min=max=infle.nextInt();//我们假设输入文件至少有一个值
while(infle.hasNextInt())
{
//这里的代码可以找到文件的最小值和最大值
//使用尽可能少的比较次数
//在该循环中为最小值和最大值指定正确的值。
//我下面的代码将把它们格式化到屏幕上
//不要将任何输出写入屏幕
int number=infle.nextInt();
如果(数量<分钟)
{
最小=数量;
}
否则,如果(数量>最大值)
{
最大值=数量;
}
}
System.out.format(“最小值:%d最大值:%d\n”,最小值,最大值);//不要以任何方式删除或修改
//步骤2:不要修改此块
//测试LO和HI之间的每个数字,包括
//卓越的和/或完美的

对于(inti=lo;iOK),我发现了一个bug,尽管它与您描述的bug不完全相同

static boolean isPrime( int n )
{
    if (n < 3)
    {
      return false;
    }
静态布尔值isPrime(int n)
{
if(n<3)
{
返回false;
}

这将错误地将2列为非素数,因为它小于3。

如果我用2运行你的
isPerfect
方法,它将返回false查看你的代码,它将返回
false
奇怪。我的教授使用了一个评分脚本。奇怪的是,你关心这个问题,但不足以亲自运行你的代码来验证fy认为这实际上是错误的。无论如何,我不确定除了投票结束这个问题之外还能做什么,因为你的方法工作正常,我们无需做任何事情。我应该澄清一下:我把这个上传到我们的内部网,我们的教授在那里运行一个评分脚本。脚本中的输出是2作为他的答案的素数,但我的是错误的,或者说是完美的。