代码如下:
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
循环结束后移动print语句,但仍在if
块内。否则,您将得到newnumber
行打印输出。
我已经尝试了一段时间让smoothScrollToPositionFromTop()工作,但它并不总是滚动到正确的位置。 我有一个ListView(有10个条目)的布局,边上有10个按钮,所以我可以滚动到列表中的每个条目。通常,当我向后或向前滚动一个位置时,效果很好,但是当我试图向后或向前滚动超过3个位置时,ListView并不完全在所选位置结束。当它失败时,它通常会减少0.5到1.5个项目,并且
问题内容: 这两种获取阶乘(循环与递归)的方法中哪种更有效/更快?如果可以改进,那又如何呢? 语言:Java 问题答案: 因为没有方法调用的开销,所以for循环将更加有效。(作为一般规则,循环几乎总是比递归更有效率) 为了解释为什么您必须深入了解调用方法和调用堆栈时发生的事情。 基本上,当您调用一个方法时,它需要一些空间来使用(例如其局部变量之类的东西),它还需要空间以用于将传入的参数传递给它,并
我正在研究CodeChef中的一个问题,我需要计算n个数字的阶乘。 用户输入一个数字,该数字确定要对多少整数执行阶乘计算,然后输入要计算的数字。 我的问题是乘法本身。例如,如果我有一个int==5,那么结果将是20(它将仅通过最后一个阶乘计算n,而不是所有阶乘) 这就是问题所在: 外部循环定义要执行的计算数量。 内部循环通过迭代numberToProcess的每个索引并将其乘以每个小于要计算的数字
但是,使用下面的代码,我只需将列表中第一个项的项号追加到每个项,而不是为每个项添加不同的项号。
我有下面的一段代码,它正在打印:一些(600)作为输出。 不知道加法是如何在“for”循环中发生的。 在下面,它混淆了“for”循环的代码块内发生的事情以及变量“y”的计算方式。有人能帮忙吗?