how to split number into pieces with remaining part

Viewed 63

I want to split any number to any identical pieces and the last remaining but not dividable piece will be the last piece. I wrote this code but I know that it should be more simple way to do this :) For example; 7500 divided by 2000 and the last modulus part will be the last part. Any suggestions?

public class MyClass {
public static void main(String args[]) {
  int x =7500;
  int y = 2000;
  int lastPartCount = 0;
  String result = new String();
  
  if(x%y != 0){
      lastPartCount = x%y;
  }
  
  int newx = x-lastPartCount;
  
  for(int i=1; i<=(newx/y); i++){
      if(i == 1){//first member
          result = "part " + i + ": 0-" + y*i;
      }else
      {
          result = "part " + i + ": " + (y*(i-1)) + "-"  + y*i;
      }
      
      System.out.println(result);
      
      if(i == (newx/y)){//last member
          result = "part " + (i+1) + ": " + (y*(i)) + "-"  + x;
          System.out.println(result);
      }
  }
}

}

the result is like this:

part 1: 0-2000
part 2: 2000-4000
part 3: 4000-6000
part 4: 6000-7500
3 Answers

You can simplify your code like the following:

public static void main(String args[]) {
  int x = 7500;
  int y = 2000;
  
  for (int i = 0; i < x/y; i++) {
      System.out.println("Part " + (i+1) + ": " + y*i + " - " + y*(i+1));
  }
  if (x%y != 0) {
    System.out.println("Part " + ((x/y)+1) + ": " + (x/y)*y + " - " + x);
  }
}

(x/y)*y) is not equal to x since you divide integers, so (x/y)*y is actually the same as the "next" i of the for-loop.

You can also try the below code:

private void test() {
        int x = 7500;
        int y = 2000;
        int j = 0;
        int newX = x;
        while (newX > y) {
            System.out.println("Part " + (j + 1) + " = " + y * j++ + " - " + y * j);
            newX -= y;
        }
        System.out.println("Part " + (j + 1) + " = " + j * y + " - " + x);
    }

Alternative approach using two variables in your for loop and Math.min():

int x = 7500;
int y = 2000;

for (int i = 0, p = 1; i < x; i += y, p++) {
    System.out.printf("Part %d: %d - %d%n", p, i, Math.min(i+y,x));
}
Related