Creating a java string randomizer from an array Android -


i trying create password generator (random string generator) send database when use below code in activity app terminates error "java.lang.arrayindexoutofboundsexception: length=67; index=85" code should return random value character array using loop generate string.

package com.example.zakratcliffe.androidantitheft;  import android.content.intent; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.menu; import android.view.menuitem; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview;  import java.util.random;  public class profileactivity extends appcompatactivity {   private textview textviewusername, textviewuseremail; private edittext texteditdescription, texteditpassword;  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_profile);      if (!sharedprefmanager.getinstance(this).isloggedin()) {         finish();         startactivity(new intent(this, loginactivity.class));     }      textviewusername = (textview) findviewbyid(r.id.textviewusername);     textviewuseremail = (textview) findviewbyid(r.id.textviewuseremail);     texteditdescription = (edittext) findviewbyid(r.id.edittextdescription);     texteditpassword = (edittext) findviewbyid(r.id.edittextpassword);      textviewuseremail.settext(sharedprefmanager.getinstance(this).getuseremail());     textviewusername.settext(sharedprefmanager.getinstance(this).getusername());      final button button = (button) findviewbyid(r.id.generate_button);     button.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             string pass = generated_pass();             texteditpassword.settext(pass);         }     }); }  string generated_pass(){     char[] genpass = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '@', '!', '?', '&', '%', '~'};     int = 1;     string generatedpass = "";     while (i < 13){         random r = new random();         int character = r.nextint(66 - 0) + 66;         system.out.println(genpass[character]);         generatedpass = generatedpass + genpass[character];         i++;     }     return  generatedpass; } public void sendtodb(view v){ } @override public boolean oncreateoptionsmenu(menu menu) {     getmenuinflater().inflate(r.menu.menu, menu);     return true; }  @override public boolean onoptionsitemselected(menuitem item) {     switch(item.getitemid()){         case r.id.menulogout:             sharedprefmanager.getinstance(this).logout();             finish();             startactivity(new intent(this, loginactivity.class));             break;     }     return true; } } 

do

int character = r.nextint(66);

instead of

int character = r.nextint(66 - 0) + 66;

as "r.nextint(66-0) + 66" may generate random number between 0 66, , number 66 added, character has value more 66, inaccessible in array(has length 66), , hence exception arrayindexoutofboundsexception.

or make code robust, instead of hardcoding 66, use:

    while (i < 13){         random r = new random();         int character = r.nextint(genpass.length);         system.out.println(genpass[character]);         generatedpass = generatedpass + genpass[character];         i++;     }     return  generatedpass; } 

Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -