Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在循环中打印输出并打印换行_Java - Fatal编程技术网

Java 在循环中打印输出并打印换行

Java 在循环中打印输出并打印换行,java,Java,我用java编写了一个简单的程序来查找阶乘,效果很好。我现在正试图改进输出,但我不知道如何做 我的节目: import java.util.Scanner; public class UserInput { public static void main(String[] args) { int fact = 1; Scanner number = new Scanner(System.in); System.out.println(

我用java编写了一个简单的程序来查找阶乘,效果很好。我现在正试图改进输出,但我不知道如何做

我的节目:

import java.util.Scanner;

public class UserInput {

    public static void main(String[] args) {
        int fact = 1;

        Scanner number = new Scanner(System.in);
        System.out.println("Enter the number : ");
        int n = number.nextInt();
        if (n < 0) {
            System.out.println("Enter positive number");
        } else {
            System.out.print("Factorial Sequence is :");
            for (int i = n; i >= 1; i--) {
                fact = fact * i;
                System.out.print(i + "*");
            }

            System.out.println("Factorial of number " + n + " is :" + fact);
        }

    }
}
import java.util.Scanner;
公共类用户输入{
公共静态void main(字符串[]args){
int-fact=1;
扫描仪编号=新扫描仪(System.in);
System.out.println(“输入编号:”);
int n=number.nextInt();
if(n<0){
System.out.println(“输入正数”);
}否则{
系统输出打印(“阶乘序列为:”);
对于(int i=n;i>=1;i--){
事实=事实*i;
系统输出打印(i+“*”);
}
System.out.println(“数字的阶乘”+n+”是:“+fact”);
}
}
}
显示的输出为这种格式(一行,*在1之后):

阶乘序列是:5*4*3*2*1*数字5的阶乘是:120

我希望以这种格式输出:

阶乘序列为:5*4*3*2*1
数字5的阶乘是:120


要填补空白,可以添加一个
\n
文字来表示换行符

 System.out.println("\nFactorial of number " + n + " is :" + fact);
对于最后一个
*
,如果
i
为1,则可以在末尾删除它,也可以不添加它

 System.out.print(i + (i > 1?"*":""));

这表示如果
i
大于
1
,则返回
*
,否则返回空字符串。

另一个选项是在for循环期间使用字符串连接:

String s = "Factorial Sequence is :";
for (int i = n; i >= 1; i--) {
    fact = fact * i;
    s += i + (i > 1 ? "*" : "");
}
System.out.println(s);
与其他选项相比,它的唯一“好处”是它可以节省调用System.out.print的每次迭代,而以字符串连接操作为代价。可能根本没有性能差异,在这里当然也不重要,但这是达到相同目的的另一种方法


编辑:使用@demostene的优秀建议,避免在最后一个“1”之后使用最后一个“*”——它避免了for循环中的条件表达式,这非常好,因为您的阶乘变大了。

只需添加一条打印行语句:

System.out.println(); // add this line
System.out.println("Factorial of number " + n + " is :" + fact);

由于1不会修改阶乘结果,您的代码可以重写为:

        for (int i = n; i >= 2; i--) {
            fact = fact * i;
            System.out.print(i + "*");
        }
        System.out.println("1");


添加println而不是println在上一个
System.out.println
的开头添加一个“\n”以至少添加到新行中。您应该接受其中一个答案,以表明问题已得到回答,并且有一个好的解决方案。单击答案左侧的复选标记,选择您认为最好的答案。他还希望最后一个数字后不出现
*
。用2开始for循环计数器,然后在最后打印1。没问题。您可以随时单击答案下方的“编辑”按钮来更新答案。您应该使用刚才注释的信息并为其添加代码。@mikeyaworski谢谢!:)这非常巧妙地避免了for循环中的条件-在我的答案中添加了注释以查看您的答案;)@布莱恩:如果你不相信,试试看:)它会在打印完1后添加一行新内容!哦,对了,println在末尾添加了换行符,但是之前的打印没有换行符。。。一个没有解释你为什么链接的链接是没有帮助的。与标准连接相比,使用StringBuilder有什么意义?连接会为每个结果创建新的字符串实例(如果尚未插入)。感谢您的解释,Tom,这确实很有帮助。但您应该知道,编译器可能会用
StringBuilder
调用替换串联,以改进代码。这取决于编译器,尽管我严重怀疑使用StringBuilder(这会将新字符串作为#append中的参数)而每次迭代两个新字符串对性能有任何影响。请参阅新对象的成本问题:第一个sop语句可以正常工作,但如果我使用带三元运算符的sop语句,它不会给我期望的结果。你能详细说明一下吗。因为我喜欢这种方法。我是这样使用的:for(inti=n;i>=1;i--){fact=fact*i;System.out.print(i);System.out.print(i+i>1?*:“”);我添加了一些括号。这可能会对它进行排序。请看我的编辑。但是,我强烈建议您查看@demostene answer。到目前为止,他的解决方案是最佳的。它很有效……很好的解决方案,并学习了三元运算符的实际用法。我同意demostene解决方案也是一个深刻的解决方案