You are given a class Solution and an inner class Inner.Private. The main method of class Solution takes an integer  as input. The powerof2 in class Inner.Private checks whether a number is a power of . You have to call the method powerof2 of the class Inner.Private from the main method of the class Solution.


hackerrank can you access solution in java



Java Can you access problem solution | HackerRank

if(num<1||num>Math.pow(2,30))
    throw new Exception();

Solution.Inner ob=new Solution.Inner();
Class<?> c = Solution.Inner.class.getDeclaredClasses()[0];
Constructor<?> constructor = c.getDeclaredConstructor(Solution.Inner.class);
constructor.setAccessible(true);
o = constructor.newInstance(ob);
Method m = c.getDeclaredMethod("powerof2",new Class[]{int.class}) ;
m.setAccessible(true);         
String ans = (String) m.invoke(o,num);
System.out.println(num+" is "+ans);

Second solution


import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import java.util.regex.*;
import java.security.*;


public class Solution {

    public static void main(String[] args) throws Exception {
        DoNotTerminate.forbidExit();    

        try{
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int num = Integer.parseInt(br.readLine().trim());
            Object o;

        o = new Inner().new Private();
System.out.println(num + " is " + ((Solution.Inner.Private)o).powerof2(num));

  System.out.println("An instance of class: " + o.getClass().getCanonicalName() 
" has been created");
        
        }//end of try
        
        catch (DoNotTerminate.ExitTrappedException e) {
            System.out.println("Unsuccessful Termination!!");
        }
    }//end of main
    static class Inner{
        private class Private{
            private String powerof2(int num){
                return ((num&num-1)==0)?"power of 2":"not a power of 2";
            }
        }
    }//end of Inner
    
}//end of Solution

class DoNotTerminate { //This class prevents exit(0)
     
    public static class ExitTrappedException extends SecurityException {

        private static final long serialVersionUID = 1L;
    }
 
    public static void forbidExit() {
        final SecurityManager securityManager = new SecurityManager() {
            @Override
            public void checkPermission(Permission permission) {
                if (permission.getName().contains("exitVM")) {
                    throw new ExitTrappedException();
                }
            }
        };
        System.setSecurityManager(securityManager);
    }
}