NewInJava
NewInJava

Reputation: 37

Getting group of the same numbers numbers

I'm working on a code which will count how many are the groups with the same number.

For example:

11022 = 2 groups with the same number
1100021 = 2 groups with the same number
12123333 = 1 group with the same number

So far I've come up to this code:

package Numbers;
import java.util.*;

public class Numbers{
    public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    int strI ;
    strI = scan.nextInt();
    int[] a = {strI};
    System.out.println(sum(a));
    System.out.println("length = "+a.length);
}

public static in sum(int[] a){
    int sum = 0;
    int last = 0;
    for (int i = 0; i < a.length - 1; i++){
            if(a[i] == a[i + 1] && last != a[i + 1]){
                sum++;
            }
            last = a[i];
        }
        return sum;
    }
}

My problem is that the inputted number will register as 1 index. is it possible to enter a series of number that will go to different indexes?

Upvotes: 0

Views: 1154

Answers (2)

Elliott Frisch
Elliott Frisch

Reputation: 201439

First, you can get the count of consecutive digits with something like

public static int sum(int a) {
  String strI = String.valueOf(a);
  int count = 0;
  boolean inRun = false;
  for (int i = 1; i < strI.length(); i++) {
    if (strI.charAt(i - 1) == strI.charAt(i)) {
      if (inRun) {
        continue;
      }
      inRun = true;
      count++;
    } else {
      inRun = false;
    }
  }
  return count;
}

public static void main(String[] args) {
  int[] arr = { 11022, 1100021, 12123333 };
  for (int val : arr) {
    int count = sum(val);
    String group = "groups";
    if (count == 1) {
      group = "group";
    }
    System.out.printf("%d = %d %s with the same number%n", val, count, group);
  }
}

Output is the requested

11022 = 2 groups with the same number
1100021 = 2 groups with the same number
12123333 = 1 group with the same number

As for your second question, you might read Integer into a List - Java arrays are immutable,

List<Integer> al = new ArrayList<>();
Scanner scan = new Scanner(System.in);
while (scan.hasNextInt()) {
  al.add(scan.nextInt());
}
Integer[] arr = al.toArray(new Integer[0]);
System.out.println(Arrays.toString(arr));

Upvotes: 1

Mshnik
Mshnik

Reputation: 7032

This is easiest done by converting it to a string so you don't have to deal with place value. After all, you only care about the characters themselves.

public static void main(String[] args){
// Get number n... Assuming n has been set to the int in question    

  int n = ...; //Fill in with whatever int you want to test
  String s = n + "";
  char same = ' ';
  int consec = 0;
  for(int i = 0; i < s.length() - 1; i++){
    if(s.charAt(i) == s.charAt(i+1)){
      if(same == ' ')
        consec++;
      same = s.charAt(i);
    }
    else{
      same = ' ';
    }
  }

  System.out.println(consec);
}

Upvotes: 1

Related Questions