2017-02-13 144 views
3

我必須編寫一個程序來查找兩個用戶輸入的數字之間的素數。我遇到的唯一問題是輸出有一個額外的逗號比它需要。我將如何去解決這個問題?在java中用逗號分隔整數輸出

import java.util.Scanner; 

public class Primes { 
public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    int start = sc.nextInt(); 
    int end = sc.nextInt(); 
    for (int i =start; i <= end; i++) { 
     if (isPrime(i)) { 
      System.out.printf("%d,", i); 
     } 
    } 
} 

public static boolean isPrime(int n) { 
    if (n <= 1) { 
     return false; 
    } 
    for (int i =2; i < Math.sqrt(n); i++) { 
     if (n % i == 0) { 
      return false; 
     } 
    } 
    return true; 
    } 
} 

輸入:1 10

輸出:2,3,4,5,7,9,

+1

你能預先知道這是在範圍的最後一個黃金? –

+2

您不能在整數後面打印逗號,因爲您不知道此時是否會有另一個整數。相反,打印逗號_before_整數,不要在第一次。你可能需要一個'boolean'來跟蹤它是否是第一次。 – ajb

+1

我的評論是針對現在從shmosel刪除的評論,而不是針對你。 –

回答

4

嘗試使用StringJoiner在這種情況下更apropriate:

import java.util.Scanner; 

public class Primes { 

public static void main(String[] args) { 

    StringJoiner joiner = new StringJoiner(","); 

    Scanner sc = new Scanner(System.in); 
    int start = sc.nextInt(); 
    int end = sc.nextInt(); 

    for (int i =start; i <= end; i++) { 

     if (isPrime(i)) { 
      joiner.add(Integer.toString(i)); 
     } 

    } 

    System.out.println(joiner.toString()); 
} 

沒有StringJoiner:

public class Primes { 

public static void main(String[] args) { 

    String separator = ""; 

    Scanner sc = new Scanner(System.in); 
    int start = sc.nextInt(); 
    int end = sc.nextInt(); 

    for (int i =start; i <= end; i++) { 

     if (isPrime(i)) { 
      System.out.printf(separator + "%d", i); 

      separator = ","; 
     } 

    } 
} 
+0

不錯。我不知道StringJoiner。很有用。 –

+0

是的,它是從java 8開始引入的。 –

+0

這個工作,但我怎麼會沒有StringJoiner呢?我在初學者的Java類,我們還沒有學到。 – lukas109

1

這是一個有點不同的方法的,使用流:

String output = IntStream.rangeClosed(start, end) 
     .filter(Primes::isPrime) 
     .mapToObj(String::valueOf) 
     .collect(Collectors.joining(",")); 

System.out.println(output);