2016-04-12 9 views
1

Ich versuche ini String in temp, ist äußeree Schleife neu zu ordnen für die Anzahl der Zeichen in temp und innere Schleife ist das finden Indexnummer von PC2_table und fügen Sie den Charakter ini[j] zu temp, alles funktioniert gut, aber ich weiß nicht, warum ich nichts Index immer 13.Ich weiß nicht, warum ich „0“ bei Index 13 temp immer

string ini = "000100010000110011110100001001101001001110101101"; 
Console.WriteLine(ini.Length + " " +ini[0]);    
int[] PC2_table = { 13 , 16 , 10 , 23 , 0, 4, 
        2 , 27 , 14 , 5 , 20, 9, 
        22 , 18 , 11 , 3 , 25, 7, 
        15 , 6 , 26 , 19 , 12, 1, 
        40 , 51 , 30 , 36 , 46, 54, 
        29 , 39 , 50 , 44 , 32, 47, 
        43 , 48 , 38 , 55 , 33, 52, 
        45 , 41 , 49 , 35 , 28, 31}; 

ini = " " + ini; // because PC2 table main indexing 1 sy hai 
string temp = null; 
for (int i = 0; i < 56; i++) 
{ 
    for (int j = 0; j < PC2_table.Length; j++) 
    {      
    if(PC2_table[j] == i) 
    { 
     Console.WriteLine(i + " " +j + " " + ini[j]); 
     temp += ini[j]; 
     break; 
    }     
    } 
} 
Console.WriteLine(temp); 
+8

Ich verstehe die Logik nicht –

+0

Entfernen Sie 'ini =" "+ ini;'. 'PC2_table' hat eine Null. Warum denken Sie, dass der Index bei "1" beginnt? –

Antwort

1

Sie die Ausführung der Anweisung

ini = " " + ini;

So ist Ihr erstes Zeichen in Ini leer. Dann haben Sie die Kombination von i = 13 und j = 0, wo das Programm versucht, auf die Position 0 von ini zuzugreifen, also gibt er Ihren leeren Platz zurück. Sie sollten also wahrscheinlich Ihre Indizes reparieren.

Ungeachtet der Tatsache, dass ich keine verrückte Idee habe, was dieses Programm sowieso macht.

1

Sie erhalten 0 bei Index 13, weil PC2_table[0] 13 ist und in diesem Fall j gleich 0 ist.

2

Bei i = 13, wenn j = 0, was geschehen ist:

PC2_table[j] = PC2_table[0] = 13 

und i ist 13, so geben Sie den if Block:

if(PC2_table[j] == i){ //enters 
} 

Aber:

ini[j] = ini[0] = " "; 

Ist a space Grund:

string ini = "000100010000110011110100001001101001001110101101"; 
... 
ini = " " + ini; //note the addition of " " in front of original ini  

Beachten Sie, dass jetzt, ini ist:

" 000100010000110011110100001001101001001110101101" //the first element at index [0] is " " 

Und Sie tun:

temp += ini[j]; //"1000001100110" + " " = "1000001100110 " //additional space 

So hast du deinen Platz in Ihrem 13-ten Index hinzugefügt:

+0

Danke, total vergessen über diese Linie ... –

+0

@JohnMaxwell yep, sei vorsichtig. ;) – Ian

Verwandte Themen