2017-02-13 19 views
3

私は2つのユーザー入力番号の間に素数を見つけるプログラムを書く必要があります。私が抱えている唯一の問題は、出力には必要以上にカンマが1つあることです。これを修正するにはどうすればいいですか?整数の出力を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

整数の後ろにカンマを表示することはできません。その時点で別の整数が続くかどうかわからないからです。代わりに、整数より前にカンマを印刷して、初めて実行しないでください。あなたが最初かどうかを追跡するために 'ブール値'が必要かもしれません。 – ajb

+1

私のコメントは、今削除されたshmoselのコメントであり、あなたのコメントではありません。 –

答えて

4

がStringJoinerを使用しようとするが、この場合には、より良いと考えている:

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); 
関連する問題