2017-02-13 145 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);