Java 从循环打印
我需要打印一个完美数的因子。以下是我主要课程的要点:Java 从循环打印,java,loops,while-loop,numbers,factors,Java,Loops,While Loop,Numbers,Factors,我需要打印一个完美数的因子。以下是我主要课程的要点: ArrayList<Integer> perfNums = new ArrayList<>(); Scanner in = new Scanner(System.in); System.out.print("Enter the upperbound: "); upperbound = in.nextInt(); for (int i = 1; i <= upperbound; i++) { if (is
ArrayList<Integer> perfNums = new ArrayList<>();
Scanner in = new Scanner(System.in);
System.out.print("Enter the upperbound: ");
upperbound = in.nextInt();
for (int i = 1; i <= upperbound; i++) {
if (isPerfect(i)) { //boolean to check if number is a perfect number
perfNums.add(i);
}
}
System.out.println("Perfect numbers between 1 and " + upperbound + " are:");
for (int i = 0; i < perfNums.size(); i++) {
System.out.print(perfNums.get(i) + " = ");
printFactor((int)perfNums.get(i));
System.out.println();
}
System.out.println("Perfect numbers between 1 and " + upperbound + " are:");
for(int i=0; i<perfNums.size(); i++){
System.out.print(perfNums.get(i) + " = ");
outputString = printFactor2(perfNums.get(i));
if(outStr.endsWith(" + ")) outStr = outStr.substring(0, outStr.length()-3);
//because the submission system would cry foul with even a single extra space
System.out.println(outStr);
}
我已经掌握了它的主要要点,但我一直在努力解决输出问题。由于我的在线提交系统的限制,我的输出需要符合确切的规格
我的问题是如何打印我的完美数字的所有因子,但删除结尾的+号?(例如)6=1+2+3
我不太确定有多少方法可以在while循环中打印。for循环对我的目标更好吗?或者是否有其他方法可以打印数字的因子?您应该将要打印的输出缓存到
StringBuilder
中。然后,您可以在打印整个字符串之前删除最后一个加号。它也有更好的性能
private static void printFactor(int number)
{
StringBuilder output = new StringBuilder();
int factor = 1;
while (factor < number)
{
if (number % factor == 0)
output.append(factor + " + ");
factor++;
}
// remove last plus sign
output.deleteCharAt(output.length() - 1);
// print the whole string
System.out.print(output.toString());
}
私有静态无效打印因子(整数)
{
StringBuilder输出=新的StringBuilder();
整数因子=1;
while(系数<数字)
{
如果(数字百分比因子==0)
输出。追加(因子+“+”);
因子++;
}
//删除最后一个加号
output.deleteCharAt(output.length()-1);
//打印整个字符串
System.out.print(output.toString());
}
解决这一问题所需的最少更改可能如下:
private static void printFactor(int number)
System.out.print(1);
int factor = 2;
while (factor<number) {
if (number%factor == 0) System.out.print(" + " + factor);
factor++;
}
}
String numb ="";
while(factor<number){
if(number%factor == 0)
numb= numb + factor+ " + ";
factor++;
}
System.out.print(numb.substring(0, numb.trim().length()-1));
私有静态无效打印因子(整数)
系统输出打印(1);
整数因子=2;
虽然(factor因为factor
从值1开始,并且数字%1==0
始终为真,您可以先打印1,然后在系统输出中翻转factor
和+
。打印如下:
private static void printFactor(int number) {
if(number > 0) {
System.out.print(1);
}
int factor = 2;
while (factor<number) {
if (number % factor == 0) {
System.out.print(" + " + factor);
}
factor++;
}
}
私有静态无效打印因子(整数){
如果(数字>0){
系统输出打印(1);
}
整数因子=2;
while(factor尝试创建一个变量字符串numb
,并使用substring
方法如下:
private static void printFactor(int number)
System.out.print(1);
int factor = 2;
while (factor<number) {
if (number%factor == 0) System.out.print(" + " + factor);
factor++;
}
}
String numb ="";
while(factor<number){
if(number%factor == 0)
numb= numb + factor+ " + ";
factor++;
}
System.out.print(numb.substring(0, numb.trim().length()-1));
String numb=”“;
(P>P>谢谢大家的快速反应。你们都是一个救生员,我在未来的代码中设法重新考虑一些新的事情。
无论如何,在等待回复的过程中,如果有人感兴趣,我正在修改代码,并提出了一个相当不雅观的解决方案。下面是对主类的更改:
ArrayList<Integer> perfNums = new ArrayList<>();
Scanner in = new Scanner(System.in);
System.out.print("Enter the upperbound: ");
upperbound = in.nextInt();
for (int i = 1; i <= upperbound; i++) {
if (isPerfect(i)) { //boolean to check if number is a perfect number
perfNums.add(i);
}
}
System.out.println("Perfect numbers between 1 and " + upperbound + " are:");
for (int i = 0; i < perfNums.size(); i++) {
System.out.print(perfNums.get(i) + " = ");
printFactor((int)perfNums.get(i));
System.out.println();
}
System.out.println("Perfect numbers between 1 and " + upperbound + " are:");
for(int i=0; i<perfNums.size(); i++){
System.out.print(perfNums.get(i) + " = ");
outputString = printFactor2(perfNums.get(i));
if(outStr.endsWith(" + ")) outStr = outStr.substring(0, outStr.length()-3);
//because the submission system would cry foul with even a single extra space
System.out.println(outStr);
}
System.out.println(“介于1和“+上限+”之间的完美数字是:”;
for(inti=0;i只是为了使用Java8:)
for循环可能不会有多大帮助,因为它只是另一种循环。您可以做的是将因子收集到一个列表中,然后打印该列表,即在该列表上循环,并在每个元素之前但第一个(或每个元素之后但最后一个)打印A+在列表中。那么使用列表如何?或者更好,使用Java 8 streams和collect()
。如果要使用代码,请使用2条print语句,如果在之前的一次迭代中打印了一个因子,请先打印+语句(在方法中使用布尔值跟踪该值,或检查当前因子是否不是1,因为它始终是第一个)除了@m0skit0所说的可能是最好的方法之外,StringJoiner
只有在您使用java 8时才可用。您可以在循环之前打印1
,在2
处启动factor
,然后打印“+”
在循环中的每个数字之前。我建议在删除字符之前调用output
上的trim
。重点是在删除最后一个字符(+
)之前删除尾随空格。为什么我没有想到呢?非常感谢!