I know my code can be made simpler and more efficient but I am trying to get it to work this way.
I want to get the biggest number consisting of 5 digits from the string. I would like to use the subString
method. As output, I just get the first 5 numbers, and it doesn't loop through the rest of the string.
public class thousandDigits
{
public static void main(String[] args)
{
String num = new String ("73167176531330624919225119674426574742355349194934" +
"96983520312774506326239578318016984801869478851843" +
"85861560789112949495459501737958331952853208805511" +
"12540698747158523863050715693290963295227443043557" +
"66896648950445244523161731856403098711121722383113" +
"62229893423380308135336276614282806444486645238749" +
"30358907296290491560440772390713810515859307960866" +
"70172427121883998797908792274921901699720888093776" +
"65727333001053367881220235421809751254540594752243" +
"52584907711670556013604839586446706324415722155397" +
"53697817977846174064955149290862569321978468622482" +
"83972241375657056057490261407972968652414535100474" +
"82166370484403199890008895243450658541227588666881" +
"16427171479924442928230863465674813919123162824586" +
"17866458359124566529476545682848912883142607690042" +
"24219022671055626321111109370544217506941658960408" +
"07198403850962455444362981230987879927244284909188" +
"84580156166097919133875499200524063689912560717606" +
"05886116467109405077541002256983155200055935729725" +
"71636269561882670428252483600823257530420752963450") ;
int greatest = 0;
int max = -1;
int numChar = Integer.parseInt(num.substring(0, 5));
for (int i = 0; i < num.length() - 5; i++)
{
greatest = numChar;
if (max < greatest)
{
max = greatest;
}
}
System.out.print(max);
}
}
The output is 7316 but it should be 99890 as the biggest 5 digit number that comes up.
That's because you do not update the numChar
inside the loop. You only do it once at the beginning. Also, the calculated substring
needs to go from i
to i+5
in the loop.
int greatest = 0;
int max = -1;
//int numChar = Integer.parseInt(num.substring(0, 5)); <-- Not Here
for (int i = 0; i < num.length() - 5; i++) {
int numChar = Integer.parseInt(num.substring(i, i + 5)); // <-- but here
greatest = numChar;
if (max < greatest) {
max = greatest;
}
}