title: iProblems with substr, integers and loops in converting decimal to binary and binary to decimal
body: <p>I wrote this program for someone who wanted it without using of ToBinaryString and ToString methods.
  I wrote the app, but it doesn't work!
  If I do Dec2Bin, it gives me null! and if I do Bin2Dec it gives me String out of index: -1!
  Can someone help me fix it?</p>
  
  <p>Code:</p>
  
  <pre><code>package decimalBinary;
  
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStreamReader;
  
  public class DecBin {
      public static void main(String[] args) throws NumberFormatException, IOException {
          int conargs1,conargs2;
          // conargs1 is input
          // conargs2 is mode, if = 1 then dec2bin, if = 2 then bin2dec
          BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          System.out.println("Enter number: ");
          conargs1=Integer.parseInt(br.readLine());
          System.out.println("Enter mode: ");
          conargs2 = Integer.parseInt(br.readLine());
          System.out.println(conargs2==1 ? "Dec2Bin" : (conargs2==2 ? "Bin2Dec" : "none"));
          if (args.length == 2){ // TO BINARY
              if(conargs2==1){
                  System.out.println(DecBin.dec2bin(String.valueOf(conargs1)));
              }else if (conargs2==2){ // TO DECIMAL
                  System.out.println(DecBin.bin2dec(String.valueOf(conargs1)));
              }
              System.exit(0);
          }
      }
  
      public static String dec2bin(String arg){
          String out = null;
          String tmp;
          long i, x;
          int maxpower = 30;
          x = Long.parseLong(arg);
  
          if (x == 0){
              return "0";
          }else if (x &gt; 0){ // positive decimals
              if (x &gt; Math.pow(2, maxpower)) {
                  return "should be no larger than " + String.valueOf(2 ^ maxpower);
              }
              out = "";
              for(i = maxpower+1; i &lt;= 0; i--){
                  if (x % (Math.pow(2, i))==0){
                      out = out + "1";
                  }else{
                      out = out + "0";
                  }
              }
          }else{ // negative decimals
              x = -x;
              x = Math.abs(x);
              if (x &gt; Math.pow(2, maxpower)) {
                  return "should be no larger than " + String.valueOf(2 ^ maxpower);
              }
              out = "";
              for(i = maxpower+1; i &lt;= 0; i--){ // Inverted Binary
                  if (x % (Math.pow(2, i))==0){
                      out = out + "0";
                  }else{
                      out = out + "1";
                  }
              }
  
              x = DecBin.bin2dec(out)+1;
  
              out= "";
              for(i = maxpower+1; i &lt;= 0; i--){
                  if (x % (Math.pow(2, i))==0){
                      out = out + "1";
                  }else{
                      out = out + "0";
                  }
  
              }
  
          }
          return out;
      }
  
      public static long bin2dec(String arg){
          // If it was a positive number.
          long dec = 0; // initializing decimal number
          long length = arg.length(); // length of our binary string
          char temp;
          //long charplace;
          long lengthofchar = 1;
          long x = 0;
          if (arg.length() &lt;= 0){return 0;}
          for (x = 0; x &lt;= length; x++) {
              // charplace = 0;
              // charplace = -x;
              // charplace += -1;
              // charplace += arg.length();
  
              // charplace = Long.sum(charplace, 5);
              // charplace -= lengthofchar;
              // charplace--;
              temp = arg.charAt(arg.length()-x-1);
              // length = length - 1;
              if (temp != '0') {
                  dec += Math.pow(2 , x - 1);
              }
          }
  
          return dec;
      }
  
  }
  </code></pre>
  
  <p>This is the error I'm getting when using bin2dec:</p>
  
  <pre><code>Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
      The method charAt(int) in the type String is not applicable for the arguments (long)
  
      at decimalBinary.DecBin.bin2dec(DecBin.java:98)
      at decimalBinary.DecBin.main(DecBin.java:22)
  </code></pre>
  
  <p>Before this, I have used <code>int</code> type for variables, but I got <code>String out of Index: -1</code> in the line I've used charAt.
  I've also used substr before that and I got the same error!</p>
  
  <p>EDIT:
  If I use <code>temp = arg.charAt(Integer.parseInt(String.valueOf(arg.length()-x-1)));</code> I will get this error:</p>
  
  <pre><code>Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
      at java.lang.String.charAt(Unknown Source)
      at decimalBinary.DecBin.bin2dec(DecBin.java:98)
      at decimalBinary.DecBin.main(DecBin.java:22)
  </code></pre>