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