Enter Name
Enter Name

Reputation: 13

How do i remove the last comma when i print numbers within a loop?

So I made this to print primes between two numbers of my choice; however, it prints out a comma after the last number and I don't know how to take it off. Example in: 0 10 out: 2, 3, 5, 7, I want 2,3,5,7

Scanner s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();


for (int i = a; i <= b; i++){
    int j;
    for (j = 2; j<i; j++){
        int p = i%j;
        if(p==0){break;}
    }
    if(i == j){System.out.printf("%d,", i);}
}




}

Upvotes: 0

Views: 3069

Answers (5)

sam
sam

Reputation: 1

this program for finding factors of a number

for(i=1;i<=number;i++)
{
  if(number%i==0)
  {
    system.out.print(i);
    if(i!=0)
    {system.out.print(",");}
  }
}

so i get the output for 10 as 1,2,5,10

Upvotes: 0

Richard Lewis
Richard Lewis

Reputation: 16

I was testing and I came up with this. I was using compilejava.net so scanner doesn't work. I bypassed that part and just set a and b manually. Basically, it builds a string with the numbers and ends in a comma. Then it prints a substring including everything except the last comma.

import java.util.*;
public class HelloWorld {

public static void main(String[] args) {

//Scanner s = new Scanner(System.in);
int a = 2;
int b = 18;
String c = "Output = ";

for (int i = a; i <= b; i++){
int j;

for (j = 2; j<i; j++){
    int p = i%j;
    if(p==0){break;}
}
if(i == j){c=c+ Integer.toString(i) + ",";}
}
System.out.print(c.subSequence(0, c.length()-1));



 }
}

Upvotes: 0

slipperyseal
slipperyseal

Reputation: 2778

This might seem like overkill, and for many cases it might be, but I have been writing a source code transcoder and I find this situation coming up a lot. Where I need commas in between values, or a prefix value which is only printed once. So I found it handy to create a class which simplifies things.

Again, you wouldn't probably want to use this if you code had one or two print loops in it, but maybe if you had more than a few. Perhaps you would remove in "on first" part if you were never going to use it.

public class FirstPrintOptions {
    private PrintStream printStream;
    private String onFirst;
    private String remaining;
    private boolean trip = false;

    public FirstPrintOptions(PrintStream printStream, String onFirst, String remaining) {
        this.printStream = printStream;
        this.onFirst = onFirst;
        this.remaining = remaining;
    }

    public void print() {
        if (!trip) {
            if (onFirst != null) {
                printStream.print(onFirst);
            }
            trip = true;
        } else {
            if (remaining != null) {
                printStream.print(remaining);
            }
        }
    }
}

Then use it like this..

    FirstPrintOptions firstPrintOptions = new FirstPrintOptions(System.out, null, ",");
    for (int x=0;x<10;x++) {
        firstPrintOptions.print();
        System.out.print(x);
    }

The results are..

0,1,2,3,4,5,6,7,8,9

Upvotes: 0

Catchwa
Catchwa

Reputation: 5865

Use a StringBuilder and write to the console at the end of your program.

StringBuilder sb = new StringBuilder();
for (int i = a; i <= b; i++){
    int j;
    for (j = 2; j<i; j++){
        int p = i%j;
        if(p==0){break;}
    }
    if(i == j){
        // If the length of the StringBuilder is 0, no need for a comma
        if(sb.length() != 0) {
            sb.append(",");
        }
        sb.append(i);
    }
}
System.out.println(sb);

Upvotes: 0

Dawood ibn Kareem
Dawood ibn Kareem

Reputation: 79875

Use a boolean to keep track of whether you've printed anything yet. Then your format string could be something like

anythingPrinted ? ",%d" : "%d"

That is, only include the comma in the format string if there's something printed.

Upvotes: 1

Related Questions