Nick Zollo
Nick Zollo

Reputation: 21

Return the count how many digits are 7 in the given number n

I'm writing a method for my CS151 class called countSevens(n). It Returns count how many digits are 7 in the given number n. This is what I have so far but I'm doing something wrong that I can't figure out.

public int countSevens(int n){
    int count = 0;
    String strI = Integer.toString(n);
    for (int i = 0; i < strI.length(); i++){
        if(strI.substring(i).equals("7")){
            count++;
        }
    }
    return count;
}

Upvotes: 1

Views: 900

Answers (5)

Serge
Serge

Reputation: 2754

You can do it with java streams

   public int countSevens(int n) {
        return (int) String.valueOf(n).chars().filter(ch -> ch == '7').count();
    }
  • (int) - cast to an int type, in this particular case it safe to cast long to int, because we can't get a conversation error. In other cases it's better to use Math.toIntExact(long)
  • String.valueOf(n) - convert to string
  • chars() - return stream of chars
  • filter(ch -> ch == '7') - filter all chars that equals to 7
  • count() - returns the count of elements in this stream

Upvotes: 2

Lino
Lino

Reputation: 19935

You can just use simple arithmetics:

public static int countSevens(int i) {
    int count = 0;
    for (i = i < 0 ? -i : i; i != 0; count += i % 10 == 7 ? 1 : 0, i /= 10);
    return count;
}

But who can read this? Not many, so here is a cleaner solution, applying the same logic:

public static int countSevens(int i) {
    int count = 0;

    // ignore negative numbers
    i = Math.abs(i);

    while(i != 0) {
        // if last digit is a 7
        if(i % 10 == 7) {
            // then increase the counter
            count++;
        }

        // remove the last digit
        i /= 10;

    }
    return count;
}

Upvotes: 0

bvdl
bvdl

Reputation: 421

To count the number of 7s in an integer:

int counter = 0;
int number = 237123;
String str_number = String.valueOf(number);
for(char c : str_number.toCharArray()){
    if(c == '7'){
        counter++;
    }
}

Upvotes: 1

Jordan
Jordan

Reputation: 2283

From the definition of String.substring(int):

Returns a string that is a substring of this string. The substring begins with the character at the specified index and extends to the end of this string.

So this will only count the last instance of a 7 in your number, and only if it's the last digit in the number.

Instead, try this:

if(strI.substring(i, i+1).equals("7"))

Or, since you're dealing with ints, you can avoid using strings altogether. n % 10 will get you the last digit, and n /= 10 will bump the entire number right by one digit. That should be enough to get you started on doing this without Strings.

Upvotes: 1

Limmy
Limmy

Reputation: 746

strI.substring(i)

Will return the part of string from i-character to the end.

Use strI.charAt(i) instead

Upvotes: 1

Related Questions