这是我编程的家庭作业,它成功编译但是当我尝试运行它时,输出看起来不像它应该如何。对我所犯错误的任何建议都将不胜感激。感谢
import java.util.Scanner;
/***********************************
* Class: FRUnit5.java
* Author: Robert Frankele
*
* Description: Ask user to enter the maximum random number of rounds (2-8).
* Then ask the user how many rounds they would like to execute (1-8).
* Display the results in formatted columns as follows:
* (example using 8 as max random number, and 2 and number of rounds)
*
* Round Rand # Rand^Round Modulus Rand/Round
* 1 7 7 0 7.00
* 2 4 16 0 2.00
*/
public class FRUnit5
{
public static void main(String[] args)
{
// Create a Scanner object for user input: 2pts
Scanner userInput = new Scanner(System.in);
// Variable to hold user's input for maximum random number: 2pts
double maxRandNum;
// Variable to hold the number of rounds the user wishes to execute: 2pts
double numRound;
double maxRound;
// Variable to hold the random number generated from the Math class
// using the user's maximum random number as an argument: 2pts
double randNumMath;
// Ask the user to enter the maximum random number to use (2-8): 2pts
System.out.print("Enter the maximum random number to use ");
// Store the number they entered into the variable declared above: 2pts
maxRandNum = userInput.nextInt();
// Clear the buffer
userInput.nextLine();
// Check to see if the number they entered is greater than 8: 5pts
// If it is, display an error message and assign 8 as the maximum random number (see project example): 3pts
// Then, assign 8 to the variable declared above that will hold the maximum random number: 3pts
if (maxRandNum > 8)
{
System.out.println("The maximum random number has to be <= 8");
maxRandNum = 8;
}
// Ask the user to enter the number of rounds they wish to execute.: 2pts
System.out.print("Enter the number of rounds you wish to execute ");
// Store the number they entered into the variable declared above: 2pts
numRound = userInput.nextInt();
// Print the header of the output, using the printf method: 8pts
// Round Rand # Rand^Round Modulus Rand/Round
System.out.printf("%10s%10s%15s%12s%15s\n", "Round", "Rand #", "Rand^Round", "Modulus", "Rand/Round");
// Set up a for loop to iterate through the number of rounds: 10pts
maxRound = 9;
for (numRound = 0; numRound < maxRound; numRound++)
{
// Calculate the random number given the maximum random number, and store in a local variable called randomNum: 5pts
int randomNum = (int) (Math.random() * maxRandNum + 1);
// Calculate the Rand^Round number, using Math.pow(randomNum, round) as the equation,
// and store in a local variable called randToRound: 5pts
double randToRound = (Math.pow(randomNum, numRound));
// Calculate the modulus: randomNum % round, and store in a variable called modulusOfRand: 3pts
double modulusOfRand = randomNum % numRound;
// Calculate randomNum / round and store in a variable called randDivRound: 3pts
double randDivRound = randomNum / numRound;
// Using printf, display the results, remembering to only display randDivRound with two places after the decimal point: 10pts
System.out.printf("%10d%10d%15d%12d%15.2f\n", numRound, randomNum, randToRound, modulusOfRand, randDivRound);
}
} // end of main
} // end of class
这就是我所看到的: 输入要使用的最大随机数9 最大随机数必须<= 8 输入您要执行的回合数6 Round Rand#Rand ^ Round Modulus Rand / Round 线程“main”中的异常java.util.IllegalFormatConversionException:d!= java.lang.Double at java.util.Formatter $ FormatSpecifier.failConversion(Formatter.java:4302) at java.util.Formatter $ FormatSpecifier.printInteger(Formatter.java:2793) at java.util.Formatter $ FormatSpecifier.print(Formatter.java:2747) 在java.util.Formatter.format(Formatter.java:2520) 在java.io.PrintStream.format(PrintStream.java:970) 在java.io.PrintStream.printf(PrintStream.java:871) 在FRUnit5.main(FRUnit5.java:76) 按任意键继续 。 。
答案 0 :(得分:1)
似乎你得到的是java.util.IllegalFormatConversionException
。
请确保在%f
中使用%d
而不是printf()
作为double
类型的变量,因为%d
在Java中使用十进制整数。
改变这个:
System.out.printf("%10d%10d%15d%12d%15.2f\n", numRound, randomNum, randToRound, modulusOfRand, randDivRound);
到此:
System.out.printf("%10f%10d%15f%12f%15.2f\n", numRound, randomNum, randToRound, modulusOfRand, randDivRound);
答案 1 :(得分:0)
程序失败的原因是System.out.printf()方法中的格式。您已将变量randToRound,modulusOfRand定义为double,但您尝试使用格式化程序中的%10d将它们格式化为int。
请添加System.out.print()以检查变量的值并在System.out.printf()中添加适当的格式,这可以解决您的问题。
可能的解决方案:
System.out.printf("%10d%10d%15d%12d%15.2f\n", (int)numRound, randomNum, (int)randToRound, (int)modulusOfRand,
randDivRound);
你的numRound循环应该从1开始,循环通过numRound当前逻辑将运行循环9次,这不是问题陈述中的预期。