2016-03-26 15 views
1

Biliyorum, TL; DR - lütfen bana eşlik et.Bir dizinin değerlerinin başka bir dizinin değerleriyle aynı olmadığını nasıl kontrol eder?

Bu Javascript işlevi, kullanıcı tarafından girilen iki dizgiyi (kullanıcı adı, parola) alması, iki alanı tahmin eden rasgele karakter tahminleri (92 karakter) üretmek için rastgele işlevi kullanarak her iki alanı doğru olarak tahmin etmesi gerekir. "Aynı zamanda, iki diziden oluşan iki kümenin değerlerini karşılaştırarak, aynı kullanıcı adı ve parolanızı tahmin etmek için kaç kez (deneme) olduğunu tahmin etmelisiniz: kullanıcı adı için kullanıcı tarafından girilen dizi veya kullanıcı adı için tahmin dizisi, ve şifre için kullanıcı tarafından girilen dizi vs şifre için tahmin dizisi.

ben sorun yaşıyorum kod ana hattı:

süre (! UserNameArray = userNameGuessArray & & passwordArray = passwordGuessArray) {(Dizilerin ikinci sette olmadan)

Normalde, Ben de "while döngüsü" yerleştirerek bu durumun üstesinden bir "döngü" şöyle: için

(x = 0; x < userNameArray.length; x ++) {

süre (userNameArray [x]! = UserNameGuessArray [x]) {

Tek sorun bu sefer Dizilerin ilk grubunun yanı sıra dizide başka bir set kontrol etmeniz gerekir olmasıdır. Değilse ile

"=!" ya da yukarıdaki kod ile nasıl bir çek iki diziler değil pay aynı değişkenleri yapmak durumunda:

Sorum şu?

var username = document.getElementById("your_Username").value; 
var userNameArray = username.split(""); 
var userNameGuessArray = []; 

var password = document.getElementById("your_Password").value; 
var passwordArray = password.split(""); 
var passwordGuessArray = []; 

var alphabet = ["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","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","0","1","2","3","4","5","6","7","8","9","`","~","!","@","#","$","%","^","&", 
"*","(",")","[","]","{","}","_","-","|","\\","'",'"',",",".",":",";","<",">","/","?"]; 

var trials = 0; 



    while (userNameArray != userNameGuessArray && passwordArray != passwordGuessArray){ 
     trials++; 
     userNameGuessArray = []; 
     passwordGuessArray = []; 
      for (z = 0; z < userNameArray.length; z++){ 
       userNameGuessArray.push(alphabet[Math.floor(Math.random()*92)]); 
      } 
      for (y = 0; y < passwordArray.length; y++){ 
       passwordGuessArray.push(alphabet[Math.floor(Math.random()*92)]); 
      } 
    } 

Herhangi bir yardım çok takdir edilecektir!

+0

Bu yüzden parola tahmin edene kadar temelde rastgele harfler almaya çalışıyorsunuz? –

+0

, kullanıcı girdisiyle eşleşecek tahminler oluşturmaya devam ederken anında tahmin dizileri oluşturuyor musunuz? – gurvinder372

+0

Evet, aynı örnekte kullanıcı adı ve parolayı tahmin etme işlevini istiyorum, böylece 92 karakterlik bir alfabe içinde, tek bir karakter kullanıcı adı ve tek bir karakter parolası girdisini tahmin etmek için ortalama 92 * 92 girişimi gerekir.Kullanıcının girişini tek bir etiketinden başarıyla tahmin eden bir işlev zaten var. "A" gibi bir karakter dizisi için ortalama 92 deneme/tahmin yapar. Çözümü deneyeceğim 'sdsmith' beni bıraktı ve yarın nasıl geçtiğini size bildirir. Ayrıca evet, 'gurvinder372', diziyi push() ile temizler ve yeniden doldurur. – Mangofett

cevap

1

Dizilerin eşit olup olmadığını denetleyen yardımcı işlevler yazabilirsiniz. Böyle bir işlev için bu post'a bakın.

Sonra söyleyebiliriz:

while(!arrayEqual(arr1, arr2) && !arrayEqual(arr3, arr4)) 

DÜZENLEME:
Sen basit, yeniden kullanılabilir, birimler halinde kodunu yeniden düzenlenmesi kırma yöntemidir ki, refactoring kadar okumalısınız.

Refactoring burada yaptığımız şeydir. Dizilerin eşit olduğunu kontrol etmek, programınızın işlevselliğine bağlı değildir, böylece kendi işlevine ayırabiliriz. Bu, mevcut işlevinizdeki kodu azaltır, okunabilirliği artırır ve kodunuzun diğer bölümlerinin arrayEqual işlevini yeniden kullanmasına izin verir.

+0

Bunu dener ve size geri döner. Girdiğin için teşekkürler! – Mangofett

+0

Bu sizin için mi işe yarıyor? – sdsmith

+0

İnanıyorum ki, bir atılımın eşiğindeyim. Yardımcı fonksiyonlar ana fonksiyonun dışında ve üstünde, while döngüsünden sonra ana fonksiyonun içine veya herhangi bir özel yere yerleştirilmelidir mi? Bu mesaja cevap verdikten sonra ana yazıyı gözden geçireceğim. – Mangofett

İlgili konular