我想用随机位填充tab [110]数组(所以1和0)。不知道如何填写值1-110,但不是0-109。 我的for循环:
for (int i = 0; i<tab.length; i++)
{
Random r = new Random();
tab[i] = r.nextInt(2);
if (i%25==0)
{
System.out.println("");
}
System.out.print(tab[i]+"("+i+")"+", ");
}
我知道通常它很简单,只是tab [i] = i + 1;,但是当我把一个随机数放入数组时它对我不起作用。我试着添加&#34; + 1&#34;在这个循环的每个地方,只有我得到的效果是当它添加到System.out.println时 - 但是我得到假的输出它是1-110,当它在阵列中它仍然是0-109。
整个代码:
package teleinformatykalab2;
import java.util.Random;
public class TeleinformatykaLab2 {
public static void losujBity(int tab[]) // Funkcja losuje ciag 110 bitow i umieszcza je w utworzonej tabeli
{
System.out.println("Ciag 110 bitow: ");
for (int i = 0; i<tab.length; 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("\n");
}
private static boolean isPowerOfTwo(int x) // Funkcja zwraca liczby, ktore sa kolejna potega liczby 2
{
//return (x & (x-1)) ==0;
return (x!=0) && ((x&(x-1)) ==0);
}
public static void wyswietlBityPowerOfTwo(int tab[])
{
boolean [] bityPotegiDwa = new boolean[7];
System.out.println("Bity, ktorych indeks w tablicy jest kolejna potega liczby 2: ");
for (int i=0; i<tab.length; i++)
{
if (isPowerOfTwo(i))
{
int j = 0;
bityPotegiDwa[j+1] = isPowerOfTwo(i);
j++;
System.out.print(tab[i]+"("+i+")"+", ");
}
}
System.out.println("\n");
}
public static void podzielCiagNaParzysteGrupy(int tab[]) // Funkcja dzieli ciag bitow na 7 grup wg indeksow potegi 2
{
int [] gr1 = new int [56];
}
public static void main(String[] args) {
int [] tab = new int [110]; // Utworzenie tablicy jako globalnej zmiennej
losujBity(tab);
wyswietlBityPowerOfTwo(tab);
podzielCiagNaParzysteGrupy(tab);
}
}
[编辑] 这是正确的方法吗?制作标签[111],然后从i = 1填充到i <= 110?
for (int i = 1; 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+")"+", ");
}
但那么tab [0]怎么样?有空吗?
[EDIT2] 我之前尝试实现汉明代码的版本是:
package teleinformatykalab2;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
public class TeleinformatykaLab2 {
//Funkcja wypelniajaca tablice ciagiem 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 wywietla bity, których indeks w tablicy jest wartoci¹ 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 wywietlanych b³êdów//
Boolean [] error = new Boolean [7];
Boolean [] errors = new Boolean [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] = true;
errors[0] = true;
}//spr="ok";
else {
error [0]=false;
errors[0] = false;
}
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]=true;
errors [1]=true;
}
else {
error [1]=false;
errors [1] = false;
}
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]=true;
errors [2] = true;
}
else {
error[2]=false;
errors [2] = false;
}
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]=true;
errors [3]=true;
}
else {
error[3]=false;
errors[3]=false;
}
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]=true;
errors [4]=true;
}
else {
error[4]=false;
errors [4]=false;
}
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]=true;
errors[5]=true;
}
else {
error[5]=false;
errors[5]=false;
}
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]=true;
errors[6]=true;
}
else {
error[6]=false;
errors[6]=false;
}
counter [6] = l7;
System.out.println("W grupie 7: "+licznik7+"("+tabBit[6]+")"+" >"+counter [6]+" "+error[6]);
//Tablica boolean ok lub b³¹d//
ArrayList<Boolean> true_or_false = new ArrayList<>();
for (Boolean tof : true_or_false)
{
int i=0;
i++;
true_or_false.add(error[i]);
System.out.print(tof+",");
}
/*//Dwuwymiarowa tablica bitów i poprawnoci
int [][] bit_check = new int [7][7];
int [] myInt = new int [7];
for (int i=0,j=0; i<7; i++, j++)
{
if (i==0) System.out.println("dwuwymiarowa tablica");
if (errors[i]==false)
{
myInt[i]= (errors[i]) ? 1 : 0;
bit_check[i]=counter;
bit_check[j]=myInt;
System.out.print(bit_check[i][j]+",");
}
}*/
////sumowanie par, które sa blêdne////
ArrayList<Integer> error_sum = new ArrayList<>();
System.out.println("\n");
for (int i=0, j=0; i<7; i++)
{
if (error[i]==false)
{
//System.out.println(counter[i]+" "+error[i]);
error_sum.add(counter[i]);
System.out.println(counter[i]+", ");
}
//System.out.print("//"+power[j]+", ");
//System.out.println("Bity zacne: " + bity[i]);
}
System.out.println("\n");
for (Integer num : error_sum)
{
System.out.print(num+", ");
}
//System.out.println("\n"+error_sum[0]+","+error_sum[1]+","+error_sum[2]+","+error_sum[3]+","+error_sum[4]+","+error_sum[5]+","+error_sum[6]);
System.out.println("\n");
////Sumowanie indeksów b³êdnych bitów//
ArrayList<Integer> error_sum_pair = new ArrayList<>();
/*for (Integer num : error_sum_pair)
{
do{
System.out.print();
}
if (true_or_false==false)
}*/
////Wskazanie blednego bitu, przez sumowanie blednych par bitow//
int suma=0;
int [] grupa = new int [7];
grupa[0] = 1;
grupa[1] = 2;
grupa[2] = 4;
grupa[3] = 8;
grupa[4] = 16;
grupa[5] = 32;
grupa[6] = 64;
for (int i=0; i<7; i++)
{
if (i==0) System.out.print("Numery blednych bitow w grupach: ");
if (error[i]==false)
{
System.out.print(grupa[i]+", ");
suma+=grupa[i];
}
if (i==6) System.out.println("\nIndeks blednego bitu w ciagu: "+suma);
}
int wskOfIndex;
for (int i=0, j=0; i<110; i++)
{
if (j>6) break;
if (i==grupa[j]) System.out.println("Bledny bit we wskazanym "+suma+" indeksie: "+tab[i]);
/*wskOfIndex=Arrays.asList(tab).indexOf(grupa[i]);
if (i==109) System.out.println(wskOfIndex);*/
}
/*////Podmiana blednego bity na prawidlowy//
for (int i=0; i<110; i++)
{
if (i==suma)
{
if (tab[i]==0) tab[i]=1;
else tab[i]=0;
};
}
////Ponowne wygenerowanie, teraz juz prawidlowego ciagu bitow//
for (int i=0; i<110; i++)
{
if (i%25==0)
{
System.out.println("");
}
System.out.print(tab[i]+"("+i+")"+", ");
}
System.out.println("\n");
System.out.println("W grupie 1: "+licznik1+"("+tabBit[0]+")" + " >"+counter[0]+" "+error[0]);
System.out.println("W grupie 2: "+licznik2 +"("+tabBit[1]+")"+" >"+counter [1]+" "+error[1]);
System.out.println("W grupie 3: "+licznik2 +"("+tabBit[2]+")"+" >"+counter [2]+" "+error[2]);
System.out.println("W grupie 4: "+licznik2 +"("+tabBit[3]+")"+" >"+counter [3]+" "+error[3]);
System.out.println("W grupie 5: "+licznik2 +"("+tabBit[4]+")"+" >"+counter [4]+" "+error[4]);
System.out.println("W grupie 6: "+licznik2 +"("+tabBit[5]+")"+" >"+counter [5]+" "+error[5]);
System.out.println("W grupie 7: "+licznik2 +"("+tabBit[6]+")"+" >"+counter [6]+" "+error[6]);*/
}
////Funkcja wypisujaca bity o indeksie w tablicy kolejnej potegi 2//
private static boolean isPowerOfTwo(int x)
{
//return (x & (x-1)) ==0;
return (x!=0) && ((x&(x-1)) ==0);
}
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 potegi dwa: ");
int [] tabBit = new int [7];
zamienBity(tab,tabBit);
System.out.println("////Bity potegi 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开始编号)我想重建这段代码,所以我问如何将随机的110位放入数组中,但是第一位是1位索引(不是标准0)。
答案 0 :(得分:0)
在Java数组中从0开始索引。因此第1个元素的索引将为0,并且N th 元素的索引将为N-1。因此,由于您需要在数组中保留110位,因此数组的索引将为0 - 109.
作为你需要引用从1开始的索引中的元素的工作搁浅,你可以编写一些方法来通过基于1的索引访问数组。
e.g。
int getArrayValue(int[] array, int index){
return array[index-1]
}
void setArrayValue(int[] array, int index, int value){
array[index -1] = value;
}
这样你的for循环将记录如下
for (int i = 1; i<=110; i++)
{
Random r = new Random();
setArrayValue(tab, i,r.nextInt(2));
if (i%25==0)
{
System.out.println("");
}
System.out.print(getArrayValue(tab, i)+"("+i+")"+", ");
}
如果要在基于1的索引中访问数组,可以在代码中使用这些方法。