java - 我的关于带有阶乘的 for 循环的 Java 代码无法正常工作
问题描述
我的Java代码应该让用户输入一个数字,然后计算该数字的阶乘,我需要使用“for循环”当我输入数字5时它告诉我阶乘是6,而它应该是120。我试过看带有分解循环的教程,但它们不起作用,我认为这是因为我有“do”命令从调用中获取值
这是代码:
static Scanner kboard = new Scanner(System.in); //variable to read in values
public static void main(String[] args) {
int choice = 0;
String dummy = "";
String forename = "";
String surname = "";
int number = 0;
do {
System.out.println("1. display the user name, 2. calculate factorial, 3. exit");
choice = kboard.nextInt();
dummy = kboard.nextLine(); //strips out the return
if (choice == 1) {
forename = getforename();
surname = getsurname();
displaydetails(forename, surname);
}
if (choice == 2) {
number = getnumber();
calcfactorial(number);
}
if (choice == 3) {
System.out.println("bye");
}
} while (choice != 3);
}
public static String getforename() {
String newforename = "";
System.out.println("Please enter your forename ?");
newforename = kboard.next();
return (newforename);
} // end getforename
public static String getsurname() {
/*
Code to prompt the user to enter a surname
*/
String newsurname = "";
System.out.println("Please enter your surname ?");
newsurname = kboard.next();
return (newsurname);
} // end getsurname
public static void displaydetails(String displayforename, String displaysurname) {
/*
Code will carry out prescribed changes and display the result
*/
char displayinitial;
String displayusername = "";
displaysurname = displaysurname.toUpperCase();
displayinitial = displayforename.charAt(0);
displayusername = displayinitial + displaysurname;
System.out.println("Your username is " + displayusername);
}
public static int getnumber() {
System.out.println("What numbers factorial do you want to know?");
int newnumber = kboard.nextInt();
return newnumber;
}
public static void calcfactorial(int newnumber) {
int count = 0;
int factorial = 1;
if (newnumber > 0) {
for (count = 1; count <= newnumber; count++); {
factorial = factorial * count;
System.out.println("Factorial of " + newnumber + " is: " + factorial);
}
} else {
System.out.println("Number must be positive");
}
}
解决方案
如果您使用过调试器,那么您可以看出它只在calcfactorial
方法中执行了一次乘法,并且count
已经6
在这一点上。原因:
for
首先,删除条件循环末尾的分号。它充当for
循环的主体。这使得count
等于newnumber + 1
或6
。
其次,在循环结束后移动您的打印语句for
,但仍在if
块内。否则你会得到newnumber
打印输出的行。
推荐阅读
- c# - SignalR HubConnection 未从无服务器 Azure SignalR 服务接收消息
- laravel - 如何在laravel中建立用户表和类别表之间的关系?
- heroku - 达芙妮拒绝所有远程请求
- python - 单击时发送 QCheckBox 的状态和数字
- reactjs - 对表行做出反应以绑定(this)单击事件处理程序
- google-cloud-platform - 如何从 Dataprep 获取列列表?
- fortran - gfortran:符号“网格”没有隐式类型
- c# - 如果我在实体框架代码优先方法中从静态方法保存数据,为什么记录没有保存在数据库中?
- java - 删除下游 ChangeLog 对象 KafkaStreams
- c++ - DLLImport C++ To .NET - char*(指向字符串的指针)