Как создать char [], используя данные из логического массива? - PullRequest
8 голосов
/ 03 мая 2020

У меня есть массив Boolean, и я пытаюсь создать соответствующий массив символов, так что каждому истину в новом массиве соответствует 1, а каждому ложному - 0. Это мой код, но, похоже, новый массив пусто, потому что ничего не печатает, Boolean nums[] печатает нормально.

char[] digits = new char[n];
for (int i = 0; i < n; i++) {
    if (nums[i]) {
        digits[i] = 1;
    }
    else if (!nums[i]) {
        digits[i] = 0;
    }
}
for (int k = 0; k < n; k++) {
    System.out.print (digits[k]);
}

Ответы [ 4 ]

10 голосов
/ 03 мая 2020

Ваша проблема в том, что у вас нет кавычек, окружающих 1 и 0.

for (int i = 0; i < n; i++) {
    if (nums[i]) {
        digits[i] = '1';
    }
    else {
        digits[i] = '0';
    }
}

Без кавычек они разыгрываются от int с до char с. 0 на самом деле нулевой символ (NUL), а 1 - начало заголовка или что-то в этом роде. Java символы кодируются с использованием UTF-16 (их длина 16 бит). Символы '0' и '1' фактически кодируются 48 и 49 соответственно (в десятичном формате).

РЕДАКТИРОВАТЬ: На самом деле, не смотрите на таблицу ASCII, посмотрите на набор символов Unicode . Unicode - это действительно расширенный набор ASCII, но он, вероятно, будет более полезным, чем таблица ascii

4 голосов
/ 03 мая 2020

Согласно Примитивным типам данных в Основах языка урок Изучение Java Языка в Oracle Java учебниках:

Тип данных char - это один 16-битный символ Unicode. Он имеет минимальное значение «\ u0000» (или 0) и максимальное значение «\ uffff» (или 65 535 включительно).

Unicode-значение 0 (ноль) является непечатным символом , а также значение Юникод 1 (один). Вот почему вы не видите ничего напечатанного. Измените digits на массив int или заполните его символьными литералами, такими как '0' или '1'

Если вы используете массив int, то будет достаточно следующего кода:

int[] digits = new int[n];
for (int i=0; i<n; i++) {
    if (nums[i]) {
        digits[i] = 1;
    }
}

for (int k=0; k<n; k++) {
    System.out.print (digits[k]);
}

Обратите внимание, что массив int неявно инициализируется так, что все элементы изначально равны 0 (нулю).

3 голосов
/ 03 мая 2020

вы можете сделать что-то подобное

char[] myChars = new char[n/16];
for(int i=0;i<nums.length/16;i++);{
  String myChar ="";
  for(int j=0;j<16;j++){
     if(nums[i*16+j])
        myChar+="1";
     else
        myChar+="0";
  }
 myChars[i]=Integer.parseInt(myChar,2);
 }
3 голосов
/ 03 мая 2020

Вы можете конвертировать так:

    public static void main(String[] args) {
        int n = 5;
        boolean[] nums = { true, false, true, false, true };
        char[] digits = new char[n];
        for (int i = 0; i < n; i++) {
            digits[i] = nums[i] ? '1' : '0';
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...