当前位置: 首页 > 知识库问答 >
问题:

我的Java代码是关于for循环和阶乘的,它不能像它应该[重复]那样工作

牟飞沉
2023-03-14

代码如下:

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");

  }

}

共有1个答案

韩单弓
2023-03-14

如果您使用了调试器,那么您可以知道它只在calcfactorial方法中执行一次乘法,并且count此时已经6。理由:

首先,删除for条件循环末尾的分号。它充当for循环的主体。这使得count等于newnumber+16

其次,在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”的计算方式。有人能帮忙吗?