2015-06-09 41 views
-1

我有一個數組counter[7],它總是用隨機位(所以1和0位/值)滿足。另外我還有一個其他數組error_sum[7],我想從counter[7]只移動錯誤的值(以前用其他算法搜索)。 問題是,我不知道如何使用for循環填充error_sum[7],直到這些錯誤值結束。如何在數組中的值不填充時打破循環?

實施例(僞碼):

計數器[7] = {1,0,0,1,1,0,1 };

假設錯了位{1,0,,,1,0,1},所以只有5(錯誤)位我想移動到error_sum[7]陣列,讓他們有這樣的:

error_sum [7] = {1,0,1,0,1,NULL,NULL}

,使得僅來自counter[7]錯誤的比特被移動到error_sum[7]

我知道如何移動錯誤的位,但我不知道如何去做,直到沒有更多的錯誤位。我正在用一個for循環與if(只選擇錯誤的位)進行循環,所以我得到的錯誤位僅與零混合,或者只有一個-s(位)不知道爲什麼。

////sumowanie par, które są błędne//// 
     int [] error_sum = new int [7]; 
     System.out.println("\n"); 
for (int i=0; i<7; i++) 
     { 
      if (error[i]=="błąd") 

      { 
       System.out.println(counter[i]+" "+error[i]); 
       for (int j=0; j<7; j++) 
       { 
        error_sum[j]=counter[i]; 
        if (_WHAT CODE INSERT HERE TO BREAK THE LOOP WHEN THERE ARE NO MORE WRONG BITS IN COUNTER[7]??_) break; 
       } 

      } 

我的整個代碼:

package teleinformatykalab2; 

import java.util.Arrays; 
import java.util.List; 
import java.util.Random; 
import java.util.stream.Collectors; 


public class TeleinformatykaLab2 { 

    //Funkcja wypełniająca tablicę ciągiem losowych bitów 0 lub 1 // 

    static boolean[] bity; 

    public static void Losowanie(int tab[]){ 

     ////int [] tab = new int[110]; 

     for (int i = 0; i<110; i++) 
     { 
      Random r = new Random(); 
      tab[i] = r.nextInt(2); 
      if (i%25==0) 
      { 
       System.out.println(""); 
      } 
      System.out.print(tab[i]+"("+i+")"+", "); 

     } 
     System.out.println(""); 

} 
    ///////////////// 


    //Funkcja wyświetla bity, których indeks w tablicy jest wartością kolejnej potęgi liczby dwa// 
    public static void zamienBity(int tab[], int tabBit[]) 
    { 
     ////System.out.println("\n"+tab[0]+tab[109]+"\n"); 
     //int [] power = new int [7]; 
     bity = new boolean[7]; 
     for (int i=0; i<110; i++) 
     { 

      if (isPowerOfTwo(i)) 
       { 
       int j = 0; 
       bity[j] = isPowerOfTwo(i); 
       j++; 
       System.out.print(tab[i]+"("+i+")"+", "); 

       } 
      if (i%50==0) 
      { 
       System.out.println(""); 
      } 

     } 

     System.out.println("\n"); 

    } 

    //Sprawdzenie ciągu kodem Hamminga// 
    public static void sprawdzHamming(int tab[], int tabBit[]) 
    { 
     // przypisanie do tabBit bitow o indeksie potęgi dwa 
     int [] power = new int [7]; 
     for(int i=0;i<tabBit.length;i++) 
     { 
      tabBit[i] = tab[(int)Math.pow(2,i)]; 
      System.out.print(tabBit[i]+", "); 
     } 
     System.out.println("////\n"); 

     //sprawdzenie pierwszej pary bitów 
     System.out.println("\nPierwsza para"); 

     int [] skip = {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,36,39,41,43,45,47,49, 
         51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87,89,91,93,95,97,99, 
         101,103,105,107,109};  
     for (int i : skip) 
     { 
      System.out.print(tab[i] + "("+i+")"+","); 

       if (i%25==0) 
       { 
        System.out.println(""); 
       } 
     } 
     System.out.println(""); 

     //sprawdzenie drugiej pary bitów 
     System.out.println("\nDruga para"); 

     int skip2 []= {3,6,7,10,11,14,15,18,19,22,23,26,27,30,31,34,35,38,39,42,43,46,47, 
         50,51,54,55,58,59,62,63,66,67,70,71,74,75,78,79,82,83,86,87,90,91,94,95,98,99,102,103,106,107}; 
      for (int j : skip2) 
      { 
      System.out.print(tab[j] + "("+j+")"+","); 
      if (j%25==0) 
       { 
        System.out.println(""); 
       } 
      } 
     System.out.println(); 

     //sprawdzenie trzeciej pary bitów 
     System.out.println("\nTrzecia para"); 

     int skip3 []= {5,6,7, 12,13,14,15, 20,21,22,23, 28,29,30,31, 36,37,38,39, 44,45,46,47, 
         52,53,54,55, 60,61,62,63, 68,69,70,71, 76,77,78,79, 84,85,86,87, 92,93,94,95, 100,101,102,103, 108,109}; 
      for (int k : skip3) 
      { 
      System.out.print(tab[k] + "("+k+")"+","); 
      if (k%18==0) 
       { 
        System.out.println(""); 
       } 
      } 
     System.out.println(); 

     //sprawdzenie czwartej pary bitów 
     System.out.println("\nCzwarta para"); 

     int skip4 []= {9,10,11,12,13,14,15,16, 25,26,27,28,29,30,31,32, 41,42,43,44,45,46,47,48, 
         57,58,59,60,61,62,63,64, 73,74,75,76,77,78,79,80, 89,90,91,92,93,94,95,96, 
         105,106,107,108,109}; 
      for (int l : skip4) 
      { 
      System.out.print(tab[l] + "("+l+")"+","); 
      if (l%8==0) 
       { 
        System.out.println(""); 
       } 
      } 
     System.out.println(); 

     //sprawdzenie piątej pary bitów 
     System.out.println("\nPiąta para"); 

     for (int m=17; m<110; m++) 
     { 
      if ((m>=32 && m<=47) && (m>=64 && m<=79) && (m>=96 && m<=111)) continue; 
      System.out.print(tab[m] + "("+m+")"+","); 
      if (m%16==0) 
       { 
        System.out.println(""); 
       } 
     } 
     System.out.println(); 

     //sprawdzenie szóśtej pary bitów 
     System.out.println("\nSzóśta para"); 

     for (int m=33; m<110; m++) 
     { 
      if (m>=65 && m<=96)/* && (m>=64 && m<=79) && (m>=96 && m<=111))*/ continue; 
      System.out.print(tab[m] + "("+m+")"+","); 
      if (m%16==0) 
       { 
        System.out.println(""); 
       } 
     } 
     System.out.println(); 

     //sprawdzenie siódmej pary bitów 
     System.out.println("\nSiódma para"); 

     int [] sixtyfour = new int [120]; 

     for (int m=65; m<110; m++) 
     { 
      //if (m>=65 && m<=96)/* && (m>=64 && m<=79) && (m>=96 && m<=111))*/ continue; 
      System.out.print(tab[m] + "("+m+")"+","); 
      if (m%16==0) 
       { 
        System.out.println(""); 
       } 
     } 
     System.out.println("\n"); 


    ////Tablica liczników par bitów// 
     int [] counter = new int [7]; 

    ////Tablica wyświetlanych błędów// 
     String [] error = new String [7]; 
    //////////Liczniki bitów jedynkowych////   
     int licznik1=0; 
     for (int a=1; a<110;a++) 
     { 
      if (tab[a]==1) 
       licznik1++; 
     } 
     int l1; 
     String spr; 
     if (licznik1%2==1) l1=1; else l1=0; 
     if (l1==tabBit[0]) error [0] = "ok";//spr="ok"; 
     else error [0]="błąd"; 
     counter [0] = l1; 

     System.out.println("W grupie 1: "+licznik1+"("+tabBit[0]+")" + " >"+counter[0]+" "+error[0]); 



     int licznik2=0; 
     for (int b=3; b<108;b++) 
     { 
      if (tab[b]==1) 
       licznik2++; 
     } 
     int l2; 
     if (licznik2%2==1) l2=1; else l2=0; 
     if (l2==tabBit[1]) error [1]="ok"; 
     else error [1]="błąd"; 
     counter [1] = l2; 
     System.out.println("W grupie 2: "+licznik2 +"("+tabBit[1]+")"+" >"+counter [1]+" "+error[1]); 


     int licznik3=0; 
     for (int c=5; c<109;c++) 
     { 
      if (tab[c]==1) 
       licznik3++; 
     } 
     int l3; 

     if (licznik3%2==1) l3=1; else l3=0; 
     if (l3==tabBit[2]) error[2]="ok"; 
     else error[2]="błąd"; 
     counter [2] = l3; 
     System.out.println("W grupie 3: "+licznik3 +"("+tabBit[2]+")"+ " >"+counter[2]+" "+error[2]); 


     int licznik4=0; 
     for (int d=9; d<109;d++) 
     { 
      if (tab[d]==1) 
       licznik4++; 
     } 
     int l4; 

     if (licznik4%2==1) l4=1; else l4=0; 
     if (l4==tabBit[3]) error[3]="ok"; 
     else error[3]="błąd"; 
     counter[3]=l4; 
     System.out.println("W grupie 4: "+licznik4 +"("+tabBit[3]+")"+ " >"+counter[3]+" "+error[3]); 
     //if (l4==tabBit[3]) System.out.print(" ok"); 

     int licznik5=0; 
     for (int e=17; e<110;e++) 
     { 
      if (tab[e]==1) 
       licznik5++; 
     } 
     int l5; 

     if (licznik5%2==1) l5=1; else l5=0; 
     if (l5==tabBit[4]) error[4]="ok"; 
     else error[4]="błąd"; 
     counter[4] = l5; 
     System.out.println("W grupie 5: "+licznik5 + "("+tabBit[4]+")"+" >"+counter[4]+" "+error[4]); 


     int licznik6=0; 
     for (int f=33; f<110;f++) 
     { 
      if (tab[f]==1) 
       licznik6++; 
     } 
     int l6; 

     if (licznik6%2==1) l6=1; else l6=0; 
     if (l6==tabBit[5]) error[5]="ok"; 
     else error[5]="błąd"; 
     counter [5] = l6; 
     System.out.println("W grupie 6: "+licznik6+"("+tabBit[5]+")"+" >"+counter[5]+" "+error[5]); 


     int licznik7=0; 
     for (int g=65;g<110; g++) 
     { 
      if (tab[g]==1) 
       licznik7++; 
     } 
     int l7; 

     if (licznik7%2==1) l7=1; else l7=0; 
     if (l7==tabBit[6]) error[6]="ok"; 
     else error[6]="błąd"; 
     counter [6] = l7; 
     System.out.println("W grupie 7: "+licznik7+"("+tabBit[6]+")"+" >"+counter [6]+" "+error[6]); 

     ////sumowanie par, które są błędne//// 
     int [] error_sum = new int [7]; 
     System.out.println("\n"); 

     for (int i=0; i<7; i++) 
     { 
      if (error[i]=="błąd") 

      { 
       System.out.println(counter[i]+" "+error[i]); 
       for (int j=0; j<7; j++) 
       { 
        error_sum[j]=counter[i]; 
        if (error[i]>) break; 
       } 

      } 
       //System.out.print("//"+power[j]+", "); 
       //System.out.println("Bity zacne: " + bity[i]); 
     } 
     System.out.println("\n"); 
     for (int i=0; i<7; i++) 
     { 
      System.out.println(error_sum[i]+", "); 
     } 



     /*for (int s=0; s<7; s++) 
     { 
      if (l1==1) break; 
     }*/ 




/*int arryNum[] = { 2, 3, 4, 5, 4, 4, 3 }; 
int[] counter = new int[] { 0, 0, 0, 0, 0 }; 
for (int i = 0; i < arryNum.length; i++) { 
    counter[arryNum[i] - 1]++; 
} 

for (int i = 0; i < counter.length; i++) 
    System.out.println((i + 1) + ":" + counter[i]);*/ 
     /*for (int n=65; n<110; n++)  
     {  
      sixtyfour[n] = tab[n]; 
      System.out.print(sixtyfour[n]+". "); 
      if (n%16==0) 
       { 
        System.out.println(""); 
       } 
      for (int a=65; a<110; a++) 
      { 
       if (a==1) 
       { 
        sum=a++; 
       } 

        System.out.println(a+sum); 
      } 
     }*/ 
     System.out.println(); 
} 


    private static boolean isPowerOfTwo(int x) 
    { 
     //return (x & (x-1)) ==0;     
     return (x!=0) && ((x&(x-1)) ==0); 
    } 
    /*public static void powerOfTwo() 
    { 
     isPowerOfTwo(x); 
     System.out.println(x); 

    }*/ 

    public static void main(String[] args) { 

     int [] tab = new int[110]; 


    // wywołanie metody wypełniającej tablicę ciągiem losowych bitów 0 lub 1 
     Losowanie(tab); 
     System.out.println("\n Bity potęgi dwa: "); 
     int [] tabBit = new int [7]; 


     zamienBity(tab,tabBit); 

     System.out.println("////Bity potęgi 2"); 
     sprawdzHamming(tab,tabBit); 
     //powerOfTwo(); 

     /*int liczby [] = new int[120]; 
     System.out.println("\n"); 
     for (int z=1; z<120;z++) 
     { 
      liczby[z]=z; 
      System.out.print(liczby[z]+", "); 
      if (z%32==0) 
       { 
        System.out.println(""); 
       } 
     }*/ 

    } 
} 
+0

你怎麼知道哪個位是錯的,哪個不是? – MaxZoom

+0

如果你運行我的代碼,你會選擇7組比特,並且有寫錯的比特(如果存在)。整行比特是隨機的(在代碼的開始處),然後檢查奇偶校驗是否正確(錯誤的比特)。 我的代碼是(我希望如此)本教程的實現https://www.youtube.com/watch?v=JAMLuxdHH8o – Chris92

+0

我現在看不到這個教程,但可以稍後再回復。 – MaxZoom

回答

0

這部分代碼顯示我error_sum [7]數組,所以只能錯位:

////sumowanie par, które są błędne//// 
     int [] error_sum = new int [7]; 
     System.out.println("\n"); 

     for (int i=0; i<7; i++) 
     { 
      if (error[i]=="błąd") 

      { 
       System.out.println(counter[i]+" "+error[i]); 

       int j=0; 
       j++; 

        error_sum[j]=counter[i]; 

        System.out.println(error_sum[j]+", "); 
      }     
     } 

所以,這個循環error_sum後[7 ]應該填充(看起來是)只有錯誤的位。然而,如果我想在這個循環之外輸出這個數組,那麼我得到了6個零,並且在第二個位置,來自error_sum [7]的最後一個錯誤位。

for (int i=0; i<7; i++) 
     { 
      System.out.print(error_sum[i]+", '"); 
     } 

該做......但是同時循環,表明我僅持續error_sum [7]數組,而不是所有的錯誤位(我不知道爲什麼?)。因此,while循環顯示與上面的for循環相同的錯誤(最後來自數組)。

do 
        { 
         int u=0; 
         u++; 
         System.out.print(error_sum[u]+", ,"); 
        } 
        while(error_sum==null); 

只有在第一個for-loop當我移動數組之間的原點時,我得到了正確的輸出。

+0

在帖子中應用更改。 – MaxZoom

+0

我從代碼的正確版本中得到了「線程中的異常」main「java.lang.NullPointerException」,它顯示了行'code' error_sum [i] =(Integer)null; for循環中的代碼錯誤。 – Chris92