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