简体   繁体   中英

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;
}

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
strI.substring(i)

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

Use strI.charAt(i) instead

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.

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++;
    }
}

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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM