到Java中的许多新行和奇怪的分布



>我正在编写一个程序,用于检查质数,然后以 10 行显示前 1000。该程序运行良好,除了当我随机显示它们时有新行的事实。前三行打印正确,但之后就乱了。有人可以帮忙吗?非常感谢。

public class PrimeTest{
public static void main(String[] args){
boolean prime;
int primeCount = 0;
//For loop to increase the integer that is checked by one and print if prime
for (int i = 2; primeCount != 1000; i++){
    prime = isPrime(i);     
    if (prime == true){
       primeCount++;
       System.out.print(i + " ");}
    else if (primeCount % 10 == 0){
       System.out.print("n");}             
    else ;}
    } 
// Method to check number for Primeness
public static boolean isPrime(int i){
    boolean check = true;
            for (int n = 2; n < i; n++){
        if (i % n != 0){
            check = true;}
        else if ( i % n == 0){ 
            check = false; break;}
    } return check;
}
}

这是我得到的输出(一部分):

2 3 5 7 11 13 17 19 23 29 
31 37 41 43 47 53 59 61 67 71 
73 79 83 89 97 101 103 107 109 113 






127 131 137 139 149 151 157 163 167 173 


179 181 191 193 197 199 211 223 227 229 

233 239 241 251 257 263 269 271 277 281 
283 293 307 311 313 317 331 337 347 349 

353 359 367 373 379 383 389 397 401 409 




419 421 431 433 439 443 449 457 461 463 

467 479 487 491 499 503 509 521 523 541 


547 557 563 569 571 577 587 593 599 601 


607 613 617 619 631 641 643 647 653 659 
661 673 677 683 691 701 709 719 727 733 


739 743 751 757 761 769 773 787 797 809 
811 821 823 827 829 839 853 857 859 863 

if语句是错误的。它应该是:

if (prime == true){
   primeCount++;
   System.out.print(i + " ");
   if (primeCount % 10 == 0){
      System.out.print("n");
   }
}

在您的代码中,每次primeCount % 10 == 0时出现非质数时都会打印一个"n"

因为

如果你的素数计数器卡在某个可以被 10 整除的数字(第一个示例中为 30),你会n您需要更改此 else 语句

else if (primeCount % 10 == 0){
       System.out.print("n");} 

对此

for (int i = 2; primeCount != 1000; i++){
    prime = isPrime(i);     
    if (prime == true){
       primeCount++;
       System.out.print(i + " ");
       if (primeCount % 10 == 0){
          System.out.println();              
        }
    } 
}

问题在于决定何时输出换行符的逻辑。 您目前正在测试是否应通过测试素数计数来查看是否应在每个非素数之后输出换行符。 如果一行上最后一个素数之后只有一个非素数,则有效。 但是,如果有多个非素数,则为每个素数输出一个换行符。

显然,只有当你刚刚找到一个素数时,素数才会改变。 因此,您需要决定在输出素数之后(或之前)立即输出换行符。

你的问题就隐藏在这里:

if (prime == true){
   primeCount++;
   System.out.print(i + " ");}
else if (primeCount % 10 == 0){
   System.out.print("n");}             
else ;}

正在发生的事情是,当您的素数是 10 的倍数并且您正在等待新的素数时,else if正在运行并且您得到不正确的换行符。

非常感谢你们的快速响应,我真的很感激!在实施您的建议后,我让它完美地工作:D

这是我最终使用的代码:

public class PrimeTest{
public static void main(String[] args){
boolean prime;
int primeCount = 1;
//For loop to increase the integer that is checked by one and print if prime
for (int i = 2; primeCount != 1000; i++){
prime = isPrime(i);     
if (prime == true){
   primeCount++;
   System.out.print(i + " ");}
   if (primeCount % 11 == 0){
   System.out.print("n");
primeCount = primeCount + 1;}             
else ;}
} 
// Method to check number for Primeness
public static boolean isPrime(int i){
boolean check = true;
        for (int n = 2; n < i; n++){
    if (i % n != 0){
        check = true;}
    else if ( i % n == 0){ 
        check = false; break;}
} return check;
}
}