2013-10-16 4 views
2
String A = "00000000"; //8-bit 
String [] Aarr = A.split(""); 
String [] Aarr1= Aarr.clone(); 
//trying to do a arithmetic right shift here 
Aarr[0]=Aarr1[0]; 
Aarr[1]=Aarr1[0]; 
Aarr[2]=Aarr1[1]; 
Aarr[3]=Aarr1[2]; 
Aarr[4]=Aarr1[3]; 
Aarr[5]=Aarr1[4]; 
Aarr[6]=Aarr1[5]; 
Aarr[7]=Aarr1[6]; 
System.out.print(Arrays.toString(Aarr)); 

Почему я получаю выход как [,, 0,0,0,0,0,0,0] вместо [, 0,0,0,0,0, 0,0,0], где первый элемент пуст?Массив по индексу 0 пуст

+3

Уважаемый господин, пожалуйста, назовите свои переменные что-то читаемое. –

+3

Я запустил ваш код, и все выглядит отлично ... Я получил ожидаемый результат. Выход: [0, 0, 0, 0, 0, 0, 0, 0, 0] –

+0

Я тоже не могу воспроизвести ваши результаты. '[0, 0, 0, 0, 0, 0, 0, 0, 0]' –

ответ

7

Это происходит потому, что, когда вы split строка с пустой строкой в ​​качестве разделителя, первый результат всегда пустая строка: потому что каждая возможная строка может быть записана в виде "" + "" + "string content". Поэтому первое место, где нужно «разбить» эту строку, используя пустую строку, находится прямо там в начале.

Ваш массив, сразу после разбиения строки, выглядит следующим образом:

["", "0", "0", "0", "0", "0", "0", "0", "0"] 

Поскольку вы правый сдвиг ваш массив и скопировать первый элемент ("") в оба слота 0 и 1, вам заканчиваются двумя пустыми строками в начале в конечном выходе.

["", "", "0", "0", "0", "0", "0", "0", "0"] 

Обратите внимание, что та же проблема может произойти в конце строки: потому что все строки конец с "" + "", а также. Однако в общем использовании Java String.split, trailing empty strings are discarded.

+0

У меня есть еще один массив, который делает то же самое, но все же производит правильный вывод :( – summerNight

+0

Прохладный, что имеет смысл, как вы думаете, что я должен делать? – summerNight

+0

@summerNight У вас есть много вариантов. Тот, который сразу приходит на ум, состоит в том, чтобы построить ваш второй массив следующим образом: 'String [] bits = A.split (" "); String [] shifted = new String [A.length()] ;, а затем игнорирует первый индекс 'bits' при построении нового массива (используйте цикл вместо того, чтобы записывать каждый индекс). Вы также можете выполнить смену с использованием методов String ('substring'), а затем разделить это на конец, если вам нужен массив (опять же, отрезав первый результат). –

0

Есть 9 элементов в вашем массиве вместо 8. Это намеренно? Код должен работать иначе.

+0

Мне пришлось исправить это: Aarr [0] = Aarr1 [0]; Aarr [1] = Aarr1 [0]; – summerNight

1

Как насчет цикла:

char[] shiftResult = new char[8]; //Or whatever type it has to be 
shiftResult[0] = A.charAt(0); 
shiftResult[1] = A.charAt(0); 
for (int i = 2; i < 8; i++) { 
    shiftResult[i] = A.charAt(i-1); 
} 

Нет пустая строка расщепления требуется.

Смежные вопросы