删除for循环(java)中的最后一个逗号



我是编码新手,我正在尝试删除最后一个循环的最后一个逗号。如果我能得到帮助就太好了!

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner dev = new Scanner(System.in);
int num1, num2;
num1 = dev.nextInt();
num2 = dev.nextInt();
int numa = 1;
System.out.println();
for (numa = num1; numa <= 100; numa++) {
if (numa / num1 == 1 && numa % num1 == 0)
System.out.print(numa);
else if (numa % num1 == 0)
System.out.print("," + numa);
}
int numb = 1;
System.out.println();
for (numb = num2; numb <= 100; numb++) {
if (numb / num2 == 1 && numb % num2 == 0)
System.out.print(numb);
else if (numb % num2 == 0)
System.out.print("," + numb);
}
int numc = 1;
System.out.println();
for (numc = num1; numc <= 100; numc++) {
if(numc / num2 == 2 && numb % num2 == 0)
System.out.print(numc);
else if(numc % num1 == 0 && numc % num2 == 0)
System.out.print(numc + ",");
}
}
}

我建议使用以下更标准的方法,因此,对于长期使用java的程序员来说,可读性强(使用i作为整数循环计数器,更喜欢计数而不是<而不是<=,简化了数学表达式(:

System.out.println();
boolean lastWasEqual = false;
for (int i = num1; i < 101; i++) {
boolean isHalf = (2 * i == num2);  // a/b = 2 <=> 2a = b
boolean isEqual = (i == num2);     // (a%b) = (b%a) = 0 <=> a = b

if (isHalf || isEqual) {
if (lastWasEqual) {
System.out.print(","); 
}
System.out.print(i);
lastWasEqual = isEqual;
}
}

这里的想法是,只有当我们知道(a(它已经准备好打印(lastWasEqual(,并且(b(它之后会有输出时,我们才会输出,(这样"最后一个逗号"就永远不会打印(。

通过看数学,你可以看到isEqual最多一次为真,isHalf最多一次也为真。当它们为真时,很容易看到。因此不需要循环:

System.out.println();
boolean willReachEqual = (num1 <= num2) && (num2 <= 100);
boolean willReachHalf  = (num1 * 2 <= num2) 
&& ((num2 % 2) == 0) && (num2 <= 200);
boolean willReachBoth = willReachEqual && willReachHalf;
System.out.println(
(willReachHalf ? (num2 / 2) : "") + 
(willReachBoth ? "," : "") + 
(willReachEqual ? num2 : ""));

根据@Lino的注释,将最后一个循环更改为:

for (numc = num1; numc <= 100; numc++) {
if(numc / num2 == 2 && numb % num2 == 0)
System.out.print(numc);
else if(numc % num1 == 0 && numc % num2 == 0){
if(numc < 100) 
System.out.print(numc + ",");
else
System.out.print(numc);
}
}

更好的方法是将数字添加到列表中(例如numbersToPrint(,然后使用Collectors.joining():

String output = numbersToPrint.stream().map(i-> String.valueOf(i)).collect(Collectors.joining(","));
// output: 1,2,...,100

或使用StringJoiner:

StringJoiner sj = new StringJoiner(",");
sj.add(String.valueOf(1)).add(String.valueOf(2));
String output = sj.toString();
// output: 1,2

或使用String.join:

String output = String.join(",", String.valueOf(1),String.valueOf(2));
// output: 1,2

最新更新