Bem eu estou tentando fazer com que uma String vá progredindo, algo como:
Antes do progresso: ‘a’
Depois do progresso: ‘b’
Com um caractere eu consegui mas eu quero que quando ele chegar no ultimo char possivel : “((char) 255)”, ele aumente um caractere e aumente um do anterior e se o anterior atingir o maximo voltar ao (char) 0 e o anterior progredir.
Algo como:
Antes do progresso: ‘zaz’
Depois do progresso: ‘zbaa’
Use o operador de % para criar um contador circular.
Por exemplo:
int circular = 0;
for (int i = 0; i < 30; i++)
{
circular = (circular + 1) % 10; //De 0 até 9
System.out.println(circular);
}
PS: Talvez tenha que fazer umas continhas, já que ‘a’ não é zero. Mas envolve simplesmente subtrair e somar o valor de ‘a’ antes e depois da soma.
P
pardal_nb
nao entendi … :?
Marky.Vasconcelos
Eu sei que ‘a’ não é zero é que quis exemplificar no meu exemplo, eu estou usando os caracteres de 30 a 230.
Mas vou usar sua dica e tentar fazer (denovo pela 3 vez)
Marky.Vasconcelos
Agora outro problema, vai só até 3 caracteres =/
Olha oque fiz:
Depois de 6 meses um dia que meu modem queimou eu decedi fazer isso denovo (Falta do que fazer).
E aqui esta o resultado:
packagebr.com.brute.engine;importjava.util.Arrays;importjava.util.Collections;importjava.util.List;importjavax.swing.JFrame;importjavax.swing.JLabel;publicclassProgressiveString{privateList<CharInterval>charsIntervals;privateintcharIntervalIndex;privateintminChar;privateintmaxChar;privatechar[]string;publicProgressiveString(CharInterval...charIntervals){this("",charIntervals);}publicProgressiveString(Stringoriginal,CharInterval...charIntervals){if(charIntervals.length==0)thrownewRuntimeException("CharIntervals can't be null!");string=original.toCharArray();charsIntervals=Arrays.asList(charIntervals);Collections.sort(charsIntervals);charIntervalIndex=0;minChar=(int)charsIntervals.get(0).first;maxChar=(int)charsIntervals.get(charsIntervals.size()-1).last;}privatechar[]copyChars(intstart,char[]old){char[]str=newchar[start+old.length];for(inti=0;i<old.length;i++)str[start+i]=old[i];returnstr;}publicvoidincrease(){char[]str=string.clone();for(inti=str.length-1;i>=0;i--){IncreaseResultresult=tryIncrease(str[i]);str[i]=result.newChar;if(result.result==IncreaseResult.INCREASED)break;if(result.result==IncreaseResult.DECREASED){if(i-1==-1){str=copyChars(1,str);str[0]=(char)minChar;break;}}}string=str.clone();}privateIncreaseResulttryIncrease(charc){if(((int)c)==maxChar){charIntervalIndex=0;returnnewIncreaseResult((char)minChar,IncreaseResult.DECREASED);}elsereturnnewIncreaseResult(nextChar(c),IncreaseResult.INCREASED);}privatecharnextChar(charc){inti=(int)c;if(i==charsIntervals.get(charIntervalIndex).last){charIntervalIndex++;return(char)charsIntervals.get(charIntervalIndex).first;}return(char)(((int)c)+1);}@OverridepublicStringtoString(){returnnewString(string);}publicstaticvoidmain(String[]args){ProgressiveStringstr=newProgressiveString(String.valueOf((char)33),newCharInterval('a','z'),newCharInterval('A','Z'),newCharInterval('0','9'));JFrameframe=newJFrame("MutableString");JLabellabel=newJLabel(" ");frame.add(label);frame.pack();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setLocationRelativeTo(null);frame.setVisible(true);intloops=2500;for(inti=0;i<loops;i++){str.increase();label.setText(str.toString());}}publicstaticclassCharIntervalimplementsComparable<CharInterval>{protectedintfirst;protectedintlast;publicCharInterval(intfirst,intlast){this.first=first;this.last=last;}publicbooleancanIncrease(charcharacter){inti=(int)character;returni>=first&&i<=last;}@OverridepublicintcompareTo(CharIntervalarg0){if(first<arg0.first)return-1;if(first>arg0.first)return1;return0;}}privateclassIncreaseResult{protectedcharnewChar;protectedintresult;publicIncreaseResult(charnewC,intresult){newChar=newC;this.result=result;}protectedstaticfinalintINCREASED=0;protectedstaticfinalintDECREASED=1;}}
E agora como novidade eu fiz essa classe chamada CharInterval que ajuda a selecionar quais chars voce quer usar.
E se alguem quer saber o motivo que fiz isso é para usar em um sistema de quebra de senhas do estilo Brute Force sem dicionário.
Talvez outro dia que não tiver nada para fazer eu continue.