代码显示:
java.util.IllegalFormatConversionException:d!= java.lang.String在 java.util.Formatter $ FormatSpecifier.failConversion(Formatter.java:4302) 在 java.util.Formatter $ FormatSpecifier.printInteger(Formatter.java:2793) 在java.util.Formatter $ FormatSpecifier.print(Formatter.java:2747)处
public class addiePorterMod10Sieve {
void sieveOfEratosthenes(int n) {
boolean prime[] = new boolean[n + 1];
for (int i = 0; i < n; i++)
prime[i] = true;
for (int p = 2; p * p <= n; p++) {
if (prime[p] == true) {
for (int i = p * p; i <= n; i += p)
prime[i] = false;
}
}
for (int i = 2; i <= n; i++) {
if (prime[i] == true)
System.out.printf(i + "%-1s %-15n", " ");
}
}
public static void main(String args[]) {
int n = 1000;
addiePorterMod10Sieve g = new addiePorterMod10Sieve();
g.sieveOfEratosthenes(n);
}
}
答案 0 :(得分:1)
我自己对格式化程序不是很熟悉,但是下面的解决方法应该可以满足您的输出需求:
int linecount = 0;
for(int i = 2; i <= n; i++)
{
if(prime[i] == true) {
// System.out.printf(i + "%-1s %-15d", " ");
linecount++;
System.out.print(i + " ");
if (linecount == 15) {
linecount =0;
System.out.println();
}
}
}
答案 1 :(得分:0)
错误源于%与参数的匹配。
int p = 0;
String nl = "\r\n";
for (int i = 2; i <= n; i++) {
if (prime[i]) {
++p;
System.out.printf("%-15d ", i);
if (p % 10 == 0) {
System.out.println();
}
//System.out.printf("%-15d%s", i, (p % 10 == 0 ? nl : " "));
}
}
现在%n
确实会产生换行符(在Windows上是"\r\n"
,在Linux上是"\n"
),并且换行了。但是,您必须将其放在格式字符串
我评论过的替代方法没有立即刷新到控制台。