Alguém poderia me ajudar? sobre binários

Binário com 0 e 1 é bom, mas binário com apenas 0, ou quase, é ainda melhor!

Escreva um programa que receba uma mensagem recebida como entrada e exiba como saída a mensagem codificada usando esse método.

Regras

Aqui está o princípio de codificação:

  • A mensagem de entrada consiste em caracteres ASCII (7 bits)
  • A mensagem de saída codificada consiste em blocos de0
  • Um bloco é separado de outro bloco por um espaço
  • Dois blocos consecutivos são usados ​​para produzir uma série de bits de mesmo valor (somente1ou0valores):
  • Primeiro bloco: é sempre 0ou00. Se for0, então a série contém1, se não, contém0
  • Segundo bloco: o número de0neste bloco é o número de bits na série

Exemplo

Vamos dar um exemplo simples com uma mensagem que consiste em apenas um caractere: C maiúsculo. C em binário é representado como1000011, então com este método, isso dá:

  • 0 0(a primeira série consiste em apenas um único1)
  • 00 0000(a segunda série consiste em quatro0)
  • 0 00(o terceiro é composto por dois1)

Então C é codificado como:0 0 00 0000 0 00

Segundo exemplo, queremos codificar a mensagem CC (ou seja, os 14 bits10000111000011):

  • 0 0(um único1)
  • 00 0000(quatro0)
  • 0 000(três1)
  • 00 0000(quatro0)
  • 0 00(dois1)

Então CC é codificado como:0 0 00 0000 0 000 00 0000 0 00

Olá @LuChristos!
Você tem mais casos de testes para testar?
Copie e colei o enunciado no chatGPT. Olha o que ele respondeu:

public class Encoder {
    public static String encode(String message) {
        StringBuilder encodedMessage = new StringBuilder();
        for (int i = 0; i < message.length(); i++) {
            char c = message.charAt(i);
            int ascii = (int) c;
            String binary = Integer.toBinaryString(ascii);
            binary = String.format("%07d", Integer.parseInt(binary));
            for (int j = 0; j < binary.length(); j++) {
                if (binary.charAt(j) == '0') {
                    encodedMessage.append("00 0000 ");
                } else {
                    encodedMessage.append("0 0 ");
                }
            }
        }
        return encodedMessage.toString();
    }

    public static void main(String[] args) {
        System.out.println(encode("C"));
        // Output: '0 0 00 0000 0 00 '
        System.out.println(encode("CC"));
        // Output: '0 0 00 0000 0 000 00 0000 0 00 '
    }
}

poderia me explicar essa parte do código? :grinning:
String binary = Integer.toBinaryString(ascii);
binary = String.format(“%07d”, Integer.parseInt(binary));
for (int j = 0; j < binary.length(); j++) {

Este trecho de código converte o valor inteiro ascii em uma string binária.

A função Integer.toBinaryString(ascii) retorna a representação binária do número inteiro ascii como uma string. Por exemplo, se o valor de ascii for 67, o resultado da função será a string “1000011”.

Em seguida, o trecho de código binary = String.format("%07d", Integer.parseInt(binary)) formata a string binária para ter sete dígitos (incluindo zeros à esquerda, se necessário), para que todos os caracteres ASCII possam ser codificados usando 7 bits.

1 curtida

muito obrigada mesmo!
:smiling_face_with_three_hearts:

Não me parece que esse código faça o pretendido. O output do código não é este indicado.

qual sua sugestão?

na aplicação começa assim:

import java.util.;
import java.io.
;
import java.math.*;

/**

  • Auto-generated code below aims at helping you parse

  • the standard input according to the problem statement.
    **/
    class Solution {

    public static void main(String args[]) {
    Scanner in = new Scanner(System.in);
    String MESSAGE = in.nextLine();

     // Write an answer using System.out.println()
     // To debug: System.err.println("Debug messages...");
    
     System.out.println("answer");