Primeiros programas em Java

Escreva seus primeiros programas Java completos: crie uma classe com um método main, compile e execute o programa e corrija os erros informados pelo compilador e pelo programa em execução. Armazene valores em variáveis de tipos primitivos e em Strings, faça cálculos com expressões aritméticas, incluindo divisão inteira e resto, e converta valores entre tipos com conversões explícitas e análise de texto. Leia texto e números do teclado com Scanner, formate resultados com printf e combine tudo em pequenos programas que você testa comparando os resultados com cálculos feitos à mão.

BásicoAula 1 de 11 do curso Curso de Programação orientada a objetos com Java

O que você vai aprender

  1. Desenvolva um programa Java completo em torno de um método main, compile-o e execute-o com o inicializador Java, corrija os erros que o interrompem e exiba o texto exatamente como pretendido.
    • Estruture um programa em torno do método main
      Reconheça as partes de um programa Java mínimo, coloque as instruções corretamente dentro do método main e siga as regras para nomes, chaves, pontos e vírgulas e comentários.
    • Compile, execute e corrija erros
      Transforme código-fonte em um programa executável com o JDK e distinga erros de compilação, de execução e de lógica para localizar e corrigir cada um deles.
    • Exiba texto com print e println
      Exiba texto e valores na tela linha por linha, controle onde novas linhas começam e use sequências de escape para aspas, tabulações e barras invertidas.
  2. Declare e atualize variáveis, escolha um tipo primitivo adequado para cada valor e armazene e combine texto em valores String.
    • Declare variáveis, atribua valores e atualize-as
      Crie variáveis com um tipo e um nome, atribua valores a elas, siga as regras de nomenclatura e preveja o valor de cada variável durante a execução de um programa.
    • Escolha um tipo primitivo e escreva literais
      Escolha o tipo primitivo adequado para números inteiros, números decimais, caracteres e valores lógicos, escreva literais de cada tipo e reconheça quando um valor não cabe em seu tipo.
    • Armazene texto e una trechos por concatenação
      Armazene texto em variáveis String e construa saídas unindo cadeias de caracteres, números e variáveis com o operador +, prevendo exatamente o que será exibido.
  3. Escreva expressões aritméticas que Java avalia na ordem desejada, use corretamente a divisão inteira e o resto e faça cálculos com números decimais e a classe Math.
    • Escreva expressões respeitando os operadores e sua precedência
      Combine valores com operadores aritméticos, preveja a ordem em que Java os avalia e atualize variáveis com atribuição composta e incremento.
    • Use a divisão inteira e o resto
      Preveja os resultados de / e % com números inteiros, use-os para dividir quantidades em unidades e reconheça a divisão por zero.
    • Faça cálculos com números decimais e a classe Math
      Faça cálculos com valores double, use os métodos prontos da classe Math para raízes, potências e arredondamento e apresente resultados com uma quantidade adequada de casas decimais.
  4. Preveja quais conversões Java faz automaticamente, escreva conversões explícitas quando uma conversão puder perder informações e transforme texto em números e números em texto.
    • Faça conversões de ampliação e conversões explícitas de tipo
      Distinga conversões automáticas de ampliação das conversões de estreitamento que precisam de conversão explícita, posicione as conversões explícitas para obter os resultados desejados e preveja seu efeito sobre um valor.
    • Converta texto em números e números em texto
      Transforme cadeias de caracteres que contêm números em valores int e double, transforme números em cadeias de caracteres e reconheça o erro que Java produz para texto que não é um número válido.
  5. Leia texto e números digitados pelo usuário, apresente resultados em um formato claro e combine entrada, cálculo e saída em pequenos programas testados.
    • Leia dados de entrada com Scanner
      Crie um Scanner para entrada pelo teclado, leia linhas, palavras e números com o método adequado e evite as armadilhas comuns com terminadores de linha, entradas incorretas e separadores decimais.
    • Formate a saída com printf
      Exiba números com uma quantidade fixa de casas decimais e alinhe a saída em colunas com printf e String.format, e saiba como as configurações do computador alteram o separador decimal.
    • Combine entrada, cálculo e saída
      Planeje, escreva e teste programas completos que leem valores, fazem cálculos com os tipos adequados e exibem resultados claros.

Guia de estudo de Primeiros programas em Java

5 capítulos

1

Escreva, compile e execute um programa Java

Um programa Java começa como texto, mas o computador precisa de uma estrutura precisa antes de poder executar esse texto como instruções. Construa uma pequena classe em torno de um método main e acompanhe o código-fonte durante a compilação e a execução. Mensagens exibidas tornam cada etapa visível. Quando algo falha, a etapa em que ocorre a falha indica se você deve examinar o código-fonte, ler uma exceção de execução ou comparar o resultado com o que esperava.

1.1 Estruture um programa em torno do método main

Um primeiro programa Java fornece ao computador uma pequena lista de instruções. A classe e o método main que as envolvem indicam a Java onde essas instruções pertencem e onde a execução começa.

Coloque instruções dentro de main
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

As chaves externas delimitam o corpo da classe. As chaves internas delimitam o corpo do método. Quando esse programa começa, Java executa a primeira instrução dentro de main. Outras instruções colocadas abaixo são executadas de cima para baixo. Quando main termina, esse pequeno programa é encerrado.

Copie public static void main(String[] args) com cuidado. Aqui, public permite que o inicializador chame o método, static permite que ele seja executado sem criar um objeto antes, e void indica que o método não retorna resultado. String[] args recebe palavras digitadas na linha de comando após o nome do programa. Você pode exibir uma mensagem sem usar essas palavras.

Faça a pontuação e os nomes corresponderem

Uma instrução como System.out.println("Hi"); termina com ponto e vírgula. Uma chave de abertura { precisa de uma chave de fechamento }. Os cabeçalhos de classe e método mostrados acima abrem blocos; não substitua essas chaves de abertura por pontos e vírgulas. Recuar a instrução quatro espaços a mais que o cabeçalho do método torna visível o aninhamento.

Salve public class Hello em Hello.java. O nome da classe pública e a parte anterior a .java devem corresponder exatamente, incluindo as maiúsculas. Se a declaração disser public class Other, o arquivo deverá ser Other.java. Uma mensagem do compilador que diz que a classe deveria ser declarada em outro arquivo aponta para essa divergência.

Java distingue maiúsculas de minúsculas. O nome System deve começar com S maiúsculo; system.out.println("Hi"); falha na compilação. Um método chamado Main é diferente de main. Uma classe que contém apenas Main pode compilar, mas o inicializador não encontra o método de entrada pretendido quando você a executa.

Torne o código legível

Use uma instrução por linha e quatro espaços de recuo para cada nível de chaves. A maioria dos espaços e das quebras de linha entre elementos do código não afeta a compilação. Espaços dentro de texto entre aspas afetam a saída. Por convenção, nomes de classes usam PascalCase, como em TravelTime.

Um comentário explica o código para as pessoas. Java ignora tudo o que vem depois de // naquela linha. Um comentário de bloco começa com /* e termina com */, e pode ocupar várias linhas. Um comentário útil explica uma razão, como // Convert hours to seconds, ao lado de uma conversão cuja finalidade possa não estar clara.

Reconheça a forma mais curta

O Java 25 e versões posteriores também oferecem suporte a um arquivo-fonte compacto:

void main() {
    IO.println("Hello, world!");
}

Essa forma omite a declaração explícita da classe. IO.println exibe uma linha, e IO.readln("Your name: ") exibe uma solicitação e retorna a linha digitada. A forma clássica com classe também funciona em versões anteriores de Java; ambas as formas fornecem um método main onde a execução começa.

Principais conclusões

  • Coloque instruções executáveis dentro do método main e associe cada chave de abertura a uma chave de fechamento.
  • Termine uma instrução, como uma chamada de exibição, com ponto e vírgula.
  • A classe pública Hello deve ficar em Hello.java; as letras maiúsculas e minúsculas importam.
  • Comentários explicam o código para os leitores e são ignorados durante a compilação.
  • O Java 25 acrescenta uma forma compacta de arquivo-fonte; a forma clássica com classe também funciona em versões anteriores.

1.2 Compile, execute e corrija erros

Escrever código-fonte e executar um programa são etapas separadas. Java primeiro verifica e traduz seu código e depois o executa. Saber qual etapa falhou ajuda você a decidir onde procurar.

Compile o código-fonte e inicie a classe

Código-fonte é o texto em um arquivo .java. O compilador, javac, traduz código-fonte válido em bytecode em um arquivo .class. A Máquina Virtual Java (JVM) executa esse bytecode. Uma JVM adequada permite executar o mesmo bytecode em diferentes sistemas operacionais.

Abra um terminal na pasta que contém Hello.java e digite:

javac Hello.java
java Hello

O primeiro comando cria Hello.class quando a compilação é bem-sucedida. O segundo inicia o programa. Seu argumento é o nome da classe, sem .class: java Hello.class pede ao inicializador que encontre um nome de classe incorreto e falha.

O JDK, ou Kit de Desenvolvimento Java, fornece ambos os comandos. Uma IDE, como IntelliJ IDEA, Eclipse, NetBeans ou Visual Studio Code com suporte a Java, realiza a compilação e a inicialização quando você pressiona Run. Ela pode marcar erros enquanto você digita, mas esses continuam sendo erros da mesma linguagem Java.

Desde o Java 11, o modo de arquivo-fonte oferece um atalho para um único programa pequeno:

java Hello.java

Isso compila o código-fonte na memória e o executa sem deixar um arquivo .class. Mantenha as duas formas distintas: java Hello inicia uma classe compilada, enquanto java Hello.java inicia o código-fonte.

Leia erros de compilação

Um erro de compilação impede que a compilação seja concluída. Por exemplo, a falta de um ponto e vírgula pode produzir:

Hello.java:3: error: ';' expected
        System.out.println("Hello")
                                   ^

A mensagem identifica o arquivo, a linha e o local onde o compilador percebeu o problema. O erro real pode estar antes: uma aspa não fechada em uma linha pode confundir as linhas posteriores. Leia a linha marcada e a anterior. Corrija o primeiro erro informado e compile novamente antes de alterar várias outras linhas. Uma correção pode eliminar muitas mensagens posteriores.

Distinga erros de execução de respostas incorretas
Tipo de problemaO que aconteceComo investigar
Erro de compilaçãoO código-fonte não pode ser compilado com sucesso.Leia a primeira mensagem do compilador e examine o código próximo.
Erro de execuçãoA execução para com uma exceção.Leia a exceção e localize a linha informada.
Erro de lógicaA execução termina, mas o resultado está incorreto.Compare a saída com um resultado calculado à mão.

Se uma variável inteira divisor contém zero, 5 / divisor falha durante a execução com ArithmeticException: / by zero. A instrução aritmética pode ser um código-fonte válido mesmo que seus valores em tempo de execução causem uma falha.

Um programa que exibe uma média de 8 quando o valor correto é cerca de 8,33 tem um erro de lógica. Nenhuma mensagem do compilador pode dizer que esse é o resultado incorreto para sua tarefa. Teste com entradas conhecidas, examine valores intermediários e encontre o primeiro cálculo incorreto.

Trabalhe em um ciclo curto: editar, salvar, compilar, executar, testar. Salvar é importante: a compilação lê o arquivo salvo, então alterações não salvas não podem mudar o programa compilado.

Principais conclusões

  • javac Hello.java compila o código-fonte; java Hello executa a classe resultante.
  • O JDK fornece comandos de desenvolvimento; a JVM executa bytecode.
  • Corrija o primeiro erro do compilador e compile novamente antes de investigar mensagens posteriores.
  • Uma exceção de execução interrompe a execução; um erro de lógica exige uma verificação do resultado esperado.

1.3 Exiba texto com print e println

A saída exibida é a primeira maneira de ver o que um programa faz. Java permite controlar os caracteres exibidos e o ponto em que a próxima linha começa.

Acompanhe a posição da saída

System.out.print(...) escreve seu valor e deixa a posição de saída na mesma linha. System.out.println(...) escreve seu valor e depois inicia uma nova linha. Chamar System.out.println() com parênteses vazios acrescenta apenas uma quebra de linha.

System.out.print("Hello");
System.out.print(", ");
System.out.println("world");
System.out.println("Bye");

As duas primeiras chamadas deixam a posição depois do espaço que segue a vírgula. A terceira acrescenta world nessa posição e depois passa para uma nova linha. A saída exata é:

Hello, world
Bye

Java não insere espaços entre chamadas. Se você remover o espaço em ", ", a primeira linha se tornará “Hello,world”. Um println() vazio entre as duas últimas instruções criaria uma linha em branco entre as mensagens.

Decida se você quer texto ou um valor

Um literal de string é um texto entre aspas duplas. Exibir "7 * 6" mostra o texto “7 * 6”. Exibir 7 * 6 avalia a multiplicação e mostra “42”. As aspas são sinais de pontuação do código; elas não são exibidas como parte do literal.

Da mesma forma, se name armazena “Ada”, System.out.println(name); mostra “Ada”, enquanto System.out.println("name"); mostra “name”. Use a variável sem aspas quando quiser seu valor armazenado.

Aspas simples têm outra função. 'A' é um valor char. 'Hello' não pode conter uma mensagem com vários caracteres e causa um erro de compilação. Use "Hello" para esse texto.

Coloque caracteres especiais em uma cadeia de caracteres

Uma sequência de escape começa com uma barra invertida e representa um caractere dentro do literal.

Código dentro de um literalCaractere exibido
\nNova linha
\tTabulação
\"Aspa dupla
\\Uma barra invertida

Por exemplo:

System.out.println("She said \"hi\"");
System.out.println("C:\\Users");

Essas instruções exibem She said "hi" e C:\Users, em linhas separadas. As barras invertidas extras indicam a Java como interpretar o caractere seguinte; nem todas são copiadas para a saída.

Uma única chamada também pode exibir várias linhas:

System.out.println("Name:\tAda\nAge:\t36");

A tabulação separa o rótulo do valor, e \n coloca a idade na próxima linha. A chamada println também acrescenta sua própria quebra de linha final. Uma tabulação avança até uma parada de tabulação, então sua largura visível depende do ambiente de saída.

Um literal de string comum entre aspas deve abrir e fechar na mesma linha do código-fonte. Pressionar Enter no meio dele deixa um literal não fechado. Para dividir uma mensagem longa entre linhas do código-fonte, escreva dois literais completos unidos com + ou use chamadas de exibição separadas.

Principais conclusões

  • print permanece na linha atual; println acrescenta uma quebra de linha após seu valor.
  • Aspas tornam o texto um literal: "name" exibe essas letras, enquanto name exibe o valor da variável.
  • Use sequências de escape para novas linhas, tabulações, aspas e barras invertidas.
  • Espaços dentro de uma cadeia de caracteres são exibidos exatamente; chamadas de exibição não acrescentam espaços separadores.
  • Use aspas duplas para uma cadeia de caracteres e aspas simples para um valor char.
  • Um literal de string comum abre e fecha na mesma linha do código-fonte.
2

Armazene dados em variáveis do tipo adequado

Variáveis permitem que um programa mantenha valores entre instruções, mas cada valor armazenado tem um tipo. Acompanhe as atribuições passo a passo para ver o que muda e o que permanece fixo. Escolha tipos para números inteiros, números decimais, caracteres ou valores lógicos adequados aos dados e depois combine texto e valores em mensagens legíveis. Pequenas diferenças na escrita de literais ou na ordem dos sinais de adição podem mudar tanto o tipo quanto o resultado de uma expressão.

2.1 Declare variáveis, atribua valores e atualize-as

Uma variável dá um nome a um valor para que instruções posteriores possam usá-lo. Seu tipo informa a Java que tipo de valor ela pode conter; uma atribuição altera o valor armazenado.

Declare e inicialize
int age;
age = 36;

A declaração apresenta age como um int. A atribuição armazena 36. A forma combinada int age = 36; é chamada de inicialização. Uma variável local deve receber um valor antes de ser lida. Declarar int age; e imediatamente exibir age gera um erro informando que a variável pode não ter sido inicializada.

Declare um nome uma vez no mesmo corpo de método. Para alterar seu valor depois, escreva age = 37;, sem repetir int. Um segundo int age = 37; nesse corpo tenta declarar a mesma variável novamente.

Leia a atribuição da direita para a esquerda

O lado direito de = é calculado primeiro. Java então armazena esse resultado na variável à esquerda:

int count = 5;
count = count + 1;

A segunda instrução lê o valor atual 5, soma 1 e armazena 6. O sinal = indica atribuição, não uma afirmação matemática de que um número é igual a ele mesmo mais um. O lado esquerdo deve indicar um lugar para armazenar o valor; 36 = age; é inválido.

A atribuição copia o valor naquele momento:

int a = 5;
int b = a;
a = 10;

Agora a contém 10 e b contém 5. Não há um vínculo contínuo que recalcule b quando a muda.

Acompanhe uma troca

Suponha que first contenha 4 e second contenha 9. A sequência first = second; second = first; perde o 4 na primeira etapa e deixa ambos os valores em 9. Preserve primeiro o valor original:

int temp = first;
first = second;
second = temp;
Após a instruçãofirstsecondtemp
int temp = first;494
first = second;994
second = temp;944

Uma tabela de rastreamento registra cada variável após cada instrução. Para int x = 3; x = x * 2; x = x + 1;, os valores são 3, depois 6 e depois 7. Atualize uma linha por vez usando os valores armazenados mais recentes.

Escolha nomes úteis e tipos fixos

Nomes podem conter letras, algarismos, sublinhados e cifrões. Eles não podem começar com um algarismo nem ser uma palavra reservada como class. Maiúsculas e minúsculas importam: total e Total são diferentes. Use nomes descritivos em camelCase, como distanceKm ou secondsLeft.

Uma variável final só pode receber uma atribuição. final int SECONDS_PER_HOUR = 3600; dá um nome claro a um fator de conversão fixo. Uma nova atribuição a ela falha na compilação. Por convenção, constantes usam palavras em maiúsculas separadas por sublinhados.

Desde o Java 10, var pode inferir o tipo de uma variável local a partir de seu inicializador. var count = 10; infere int; var price = 2.5; infere double. O tipo inferido permanece fixo. var count; falha porque não há um inicializador a partir do qual inferir o tipo.

Principais conclusões

  • Uma declaração indica o nome e o tipo de uma variável; a inicialização também lhe atribui um valor inicial.
  • A atribuição avalia o lado direito e depois armazena o resultado à esquerda.
  • Copiar um valor não vincula variáveis; use uma variável temporária ao trocar valores.
  • Leia uma variável local somente depois que ela tiver recebido um valor.
  • final impede uma nova atribuição, e var infere um tipo fixo a partir de um inicializador.

2.2 Escolha um tipo primitivo e escreva literais

O tipo de um valor controla seu intervalo, a escrita de seu literal e os cálculos que Java pode fazer com ele. Use int para contagens comuns e double para medidas comuns, conhecendo também os outros tipos primitivos.

Compare os oito tipos primitivos
TipoArmazenamento e valores
byteInteiro de 8 bits: −128 a 127
shortInteiro de 16 bits: −32.768 a 32.767
intInteiro de 32 bits: −2.147.483.648 a 2.147.483.647
longInteiro de 64 bits: −9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
floatPonto flutuante de 32 bits; cerca de 7 algarismos significativos
doublePonto flutuante de 64 bits; cerca de 15–17 algarismos significativos
charUma unidade de código UTF-16 de 16 bits: 0 a 65.535
booleantrue ou false

Valores finitos de float vão aproximadamente de −3,4 × 10³⁸ a +3,4 × 10³⁸; valores finitos de double vão aproximadamente de −1,8 × 10³⁰⁸ a +1,8 × 10³⁰⁸. Esses intervalos amplos não tornam todos os decimais dentro deles exatamente representáveis.

Um char frequentemente representa um único caractere, como 'A'. Alguns caracteres Unicode exigem duas unidades de código UTF-16, então um char não pode representar todos os caracteres possíveis. 'A' tem código numérico 65, 'a' tem 97 e '7' tem 55. O caractere '7' é diferente do inteiro 7. Um boolean não é um número: boolean active = 1; falha.

Escreva literais para seus tipos

Um literal escreve um valor diretamente no código-fonte. 42 é um literal int, 42L é um long, 3.5 é um double e 3.5f é um float. Literais de caractere usam aspas simples; literais de String usam aspas duplas. Nomes de tipos primitivos são escritos em minúsculas, enquanto String começa com letra maiúscula.

Escreva long large = 3000000000L;. Sem o L, esse literal inteiro é grande demais. Escreva float rate = 3.5f;: 3.5 sem sufixo tem tipo double, que Java não converte silenciosamente por estreitamento para float. Uma constante inteira que cabe no tipo pode inicializar um tipo inteiro menor: byte b = 100; compila, mas byte b = 200; não.

Sublinhados entre algarismos tornam um literal legível: 1_000_000 tem o mesmo valor que 1000000. A notação científica usa e, como em 1.5e3, que significa 1500,0. Decimais no código-fonte sempre usam ponto.

Observe o intervalo da operação

Um cálculo inteiro pode sofrer estouro sem mensagem de erro. Somar 1 ao maior int faz o resultado dar a volta até o menor int. O produto 50_000 * 50_000 usa aritmética int e produz -1794967296. Em 50_000L * 50_000, um operando é long, então o produto é o valor correto 2500000000.

Alterar apenas a variável de destino para long é tarde demais para corrigir um produto int que já sofreu estouro. Escolha um operando de tipo suficientemente amplo antes da multiplicação.

Valores em ponto flutuante têm outra limitação. Muitas frações decimais são armazenadas como aproximações binárias: 0.1 + 0.2 exibe 0.30000000000000004. Formate esses resultados para exibição. Cálculos monetários exatos podem armazenar centavos inteiros em um long; a classe BigDecimal é outra opção para decimais exatos.

Principais conclusões

  • Java tem oito tipos primitivos; String é uma classe.
  • Use o sufixo de um literal para escolher long (L) ou float (f).
  • Cálculos inteiros podem sofrer estouro sem aviso; amplie um operando antes do cálculo.
  • Tipos em ponto flutuante armazenam muitas frações decimais de forma aproximada.
  • Um char armazena uma unidade de código UTF-16, enquanto um boolean armazena um valor lógico.
  • Um decimal no código-fonte usa ponto, mesmo em um computador que usa vírgulas decimais.

2.3 Armazene texto e una trechos por concatenação

Uma String contém texto, incluindo espaços, algarismos, pontuação ou nenhum caractere. O operador + pode combinar esse texto com outros valores para construir uma mensagem.

Una valores em texto
String firstName = "Ada";
String lastName = "Lovelace";
System.out.println(firstName + " " + lastName);

A saída é “Ada Lovelace”. O literal do meio fornece o espaço. Sem ele, firstName + lastName produziria “AdaLovelace”. A concatenação não acrescenta separadores para você.

Concatenação significa unir valores em uma nova cadeia de caracteres. Se um dos operandos de + for uma String, Java converte o outro valor em texto e os une. Assim, "Age: " + 36 se torna “Age: 36”, e "Price: " + 2.5 se torna “Price: 2.5”. Os algarismos no resultado agora fazem parte de um valor de texto.

String começa com S maiúsculo. Diferentemente dos oito tipos primitivos, ela é uma classe. Escrever string name = "Ada"; com s minúsculo falha na compilação. A cadeia de caracteres vazia "" é um texto válido sem caracteres; ela não é um valor ausente.

Acompanhe os sinais de adição da esquerda para a direita

Considere:

System.out.println("Sum: " + 2 + 3);

O primeiro + une a String e 2, formando “Sum: 2”. O segundo une essa String e 3, formando “Sum: 23”. Quando o resultado acumulado é texto, o próximo + continua unindo texto.

Compare três formas:

ExpressãoResultadoMotivo
"Sum: " + 2 + 3"Sum: 23"Há texto na primeira adição.
2 + 3 + " apples""5 apples"A primeira operação soma dois números.
"Sum: " + (2 + 3)"Sum: 5"Os parênteses fazem a soma ocorrer primeiro.

Use parênteses quando uma mensagem deve conter o resultado de uma adição ou subtração. Por exemplo, "Diff: " + (5 - 2) produz “Diff: 3”. Sem os parênteses, "Diff: " + 5 - 2 tenta subtrair 2 de uma String e falha na compilação.

Multiplicação e divisão têm precedência maior que +. A expressão "Area: " + 4 * 5 calcula o produto primeiro e produz “Area: 20”.

Construa uma mensagem em etapas
String message = "Hi";
message += "!";

A variável atualizada contém “Hi!”. Para uma String, += acrescenta texto ao atribuir o resultado da união novamente à variável. Você pode montar uma mensagem curta com várias instruções e exibi-la uma vez ao final.

Tenha cuidado com caracteres. Dois operandos char não acionam a concatenação de String. 'A' + 'B' soma seus códigos numéricos, 65 e 66, produzindo o int 131. Começar com a String vazia muda a sequência: "" + 'A' + 'B' primeiro cria “A”, depois “AB”. As aspas determinam os tipos dos operandos, então também determinam o significado de +.

Principais conclusões

  • A concatenação une texto; ela não insere espaços extras.
  • Uma sequência de operações + prossegue da esquerda para a direita após as operações de maior precedência.
  • Coloque uma adição ou subtração numérica entre parênteses antes de unir seu resultado a um rótulo.
  • Dois valores char são somados numericamente, a menos que uma String já faça parte da operação.
3

Faça cálculos com expressões aritméticas

Os cálculos dependem tanto da ordem das operações quanto dos tipos de seus operandos. Acompanhe as expressões antes de executá-las, especialmente quando há divisão dentro de um cálculo maior. Divisão inteira e restos separam quantidades em grupos ou unidades de tempo; a aritmética decimal mantém frações. Métodos prontos de Math tratam raízes, potências e arredondamento, com tipos de retorno que importam ao armazenar seus resultados.

3.1 Escreva expressões respeitando os operadores e sua precedência

Uma expressão combina valores para produzir um resultado. Java a avalia de acordo com a precedência de operadores, e uma instrução pode então armazenar ou exibir esse resultado.

Escreva as operações explicitamente

Os operadores aritméticos são +, -, *, / e %: adição, subtração, multiplicação, divisão e resto. Com int width = 4; e int height = 5;, width * height é avaliado como 20.

Toda multiplicação precisa de *. A forma semelhante à álgebra 2(3 + 4) é inválida em Java; escreva 2 * (3 + 4). Java não tem operador aritmético de potência. 2 ^ 3 significa uma operação bit a bit e produz 1, não 8. Para elevar um valor ao quadrado, escreva x * x; para calcular outra potência, use Math.pow.

Aplique a precedência antes de ler da esquerda para a direita
OrdemOperadores ou agrupamento
PrimeiroParênteses
DepoisSinal de menos unário e conversões explícitas
Depois*, /, %
Por último+, -

No mesmo nível, esses operadores aritméticos se agrupam da esquerda para a direita. 2 + 3 * 4 é 14; (2 + 3) * 4 é 20. Em 10 - 4 - 3, a primeira subtração produz 6 e a segunda produz 3. Em 24 / 4 * 2, a divisão produz 6 e a multiplicação produz 12. Para tratar o denominador como 4 * 2, seriam necessários parênteses.

Calcule uma média corretamente

Suponha int a = 7, b = 8, c = 10;. A expressão a + b + c / 3 divide apenas c. A divisão inteira faz 10 / 3 ser igual a 3, e as adições produzem então 18.

(a + b + c) / 3 agrupa o total inteiro, 25, mas ambos os operandos de / são inteiros. O resultado é 8. Usar (a + b + c) / 3.0 mantém a parte fracionária e produz 8.333333333333334.

Os tipos dos operandos controlam a aritmética. Dois operandos int produzem um resultado int. Um operando double faz com que o outro operando numérico seja convertido para double, como em 5 * 2.0, cujo resultado é 10.0. A variável de destino não muda como a operação aritmética anterior foi feita.

Atualize um valor armazenado
int total = 10;
total += 5;
total *= 2;
total--;

Os valores armazenados passam a ser 10, 15, 30 e 29. Para esses operandos int, total += 5; realiza a mesma atualização que total = total + 5;. Os operadores -=, /= e %= combinam de modo semelhante uma operação com uma atribuição. count++; aumenta uma variável em 1, e count--; a diminui em 1. Usados como instruções separadas, seus efeitos são fáceis de acompanhar.

Uma expressão como a + b não altera nenhum dos operandos. Para usar seu resultado, atribua-o ou passe-o a uma chamada de exibição: int sum = a + b; ou System.out.println(a + b);. A linha isolada a + b; não compila porque Java não permite essa expressão aritmética como instrução independente. Atribuições, incrementos, decrementos e chamadas de métodos podem ser independentes e podem produzir efeitos.

Principais conclusões

  • Use operadores explícitos: * multiplica, e ^ não calcula uma potência.
  • Aplique primeiro a precedência; no mesmo nível aritmético, siga da esquerda para a direita.
  • Coloque o total inteiro entre parênteses antes de dividi-lo para encontrar uma média.
  • Os tipos dos operandos determinam os resultados aritméticos antes da atribuição.
  • A atribuição composta armazena um valor atualizado; ++ e -- em instruções independentes alteram o valor em 1.

3.2 Use a divisão inteira e o resto

A divisão inteira responde quantos grupos completos cabem. O resto informa o que sobra. Juntas, essas operações dividem uma quantidade em partes úteis.

Preveja o quociente e o resto

Quando ambos os operandos são inteiros, / descarta a parte fracionária, aproximando o resultado de zero. 7 / 2 é 3, 2 / 3 é 0 e -7 / 2 é −3. Isso é truncamento, não arredondamento para o inteiro mais próximo.

O operador de resto % retorna o que sobra após a divisão. 17 / 5 produz 3, e 17 % 5 produz 2. Três grupos de 5 correspondem a 15, deixando 2. Para operandos inteiros e um divisor diferente de zero, (a / b) * b + a % b reconstrói a usando aritmética inteira de Java.

O sinal de um resto diferente de zero segue o operando à esquerda: -7 % 3 é −1, enquanto 7 % -3 é 1. Para inteiros não negativos, n % 2 é 0 para valores pares e 1 para valores ímpares.

Divida segundos em unidades maiores

Comece com 3725 segundos:

int totalSeconds = 3725;
int hours = totalSeconds / 3600;
int secondsAfterHours = totalSeconds % 3600;
int minutes = secondsAfterHours / 60;
int seconds = secondsAfterHours % 60;

A primeira divisão encontra 1 hora completa. O resto é 125 segundos. Dividir esse resto por 60 encontra 2 minutos, com 5 segundos restantes. O resultado é 1 h 2 min 5 s. A recomposição do total fornece 3600 segundos mais 120 segundos mais 5 segundos, ou 3725.

Use o resto após retirar as horas para encontrar os minutos dentro da hora atual. Dividir o total original por 60 produziria todos os 62 minutos completos, incluindo os minutos já contados como uma hora.

Os mesmos operadores extraem algarismos decimais de um inteiro não negativo. 4827 % 10 fornece o último algarismo, 7; 4827 / 10 fornece os algarismos iniciais restantes, 482.

Distinga grupos completos de recipientes suficientes

Para 50 ovos e caixas com capacidade para 12 ovos, 50 / 12 produz 4 caixas cheias e 50 % 12 produz 2 ovos restantes. Acomodar todos os ovos exige uma quinta caixa. Para quantidades não negativas e capacidades positivas de caixa, a expressão inteira (count + size - 1) / size arredonda a quantidade de recipientes para cima, desde que a adição não cause estouro. Neste exemplo, (50 + 12 - 1) / 12 produz 5.

Escolha a divisão fracionária antes que ela aconteça
ExpressãoResultado armazenado ou calculado
double result = 7 / 2;3.0
double result = 7 / 2.0;3.5
double result = (double) 7 / 2;3.5

Um destino double não pode recuperar uma fração descartada. Torne um operando double antes de dividir quando precisar da fração.

A divisão ou o cálculo do resto por zero inteiro lança ArithmeticException durante a execução. A divisão em ponto flutuante se comporta de outra forma: 5.0 / 0 produz Infinity, -5.0 / 0 produz -Infinity e 0.0 / 0 produz NaN, que significa “não é um número”. Portanto, um resultado pode ser inutilizável mesmo quando a execução não para.

Principais conclusões

  • A divisão inteira / trunca em direção a zero; % retorna o resto.
  • Um resto inteiro diferente de zero tem o sinal do dividendo.
  • Use quocientes e restos sucessivos para dividir segundos em horas, minutos e segundos.
  • Caixas cheias e caixas necessárias para todos os itens respondem a perguntas diferentes.
  • Torne um operando double antes da divisão para manter uma fração.
  • A divisão inteira por zero lança uma exceção; a divisão em ponto flutuante pode produzir infinito ou NaN.

3.3 Faça cálculos com números decimais e a classe Math

A aritmética decimal é útil para medidas e médias. A classe Math acrescenta cálculos prontos, enquanto o arredondamento permite escolher como armazenar ou apresentar um resultado.

Mantenha frações e reconheça aproximações

150 / 2.5 produz 60.0, uma velocidade em km/h quando a distância é de 150 km e o tempo é de 2,5 horas. Como um operando é double, a divisão mantém um resultado fracionário quando necessário. Valores double inteiros comuns são exibidos com uma parte decimal, como 60.0.

Um double armazena uma aproximação binária de muitos valores decimais. Consequentemente, 1.1 * 3 exibe 3.3000000000000003, e 10.0 / 3 exibe 3.3333333333333335. Mantenha o valor de trabalho nos cálculos posteriores e arredonde-o ao apresentá-lo.

Valores grandes ou pequenos podem ser exibidos em notação científica. 1.23456789E7 representa 12.345.678,9, e 1.0E-4 representa 0,0001. Para valores positivos finitos, a notação comum é usada de 0,001 até 10.000.000, sem incluir esse último. A notação científica altera a forma exibida, não o valor subjacente.

Chame métodos úteis de Math

Math está em java.lang, portanto não é necessária uma importação.

ChamadaResultado e finalidade
Math.sqrt(16)4.0, uma raiz quadrada
Math.pow(2, 10)1024.0, uma potência
Math.abs(-7)7, um valor absoluto
Math.max(3, 9)9, o maior valor
Math.min(3, 9)3, o menor valor

Math.sqrt e Math.pow retornam double. A constante Math.PI é aproximadamente 3,141592653589793. Para um círculo com raio de 2,5 cm, Math.PI * 2.5 * 2.5 produz 19.634954084936208 cm², cerca de 19,63 cm². Para um triângulo retângulo com catetos de 3 cm e 4 cm, Math.sqrt(3 * 3 + 4 * 4) primeiro soma os quadrados dos catetos para obter 25 e depois produz 5.0 cm.

Escolha uma direção de arredondamento
ChamadaResultado
Math.round(2.4)2
Math.round(2.5)3
Math.round(-2.5)-2
Math.floor(2.7)2.0
Math.ceil(2.1)3.0
Math.floor(-2.7)-3.0

round escolhe o inteiro mais próximo, com valores exatamente no meio seguindo em direção ao infinito positivo. floor arredonda para baixo, em direção ao infinito negativo; ceil arredonda para cima, em direção ao infinito positivo. Para negativos, “para baixo” significa um valor mais negativo, então aplicar a função piso a −2,7 produz −3,0.

Para um argumento double, Math.round retorna um long. Armazene esse resultado em um long ou converta-o explicitamente quando um int for adequado: int rounded = (int) Math.round(2.7); armazena 3. floor e ceil retornam valores double.

Para arredondar um valor armazenado para duas casas decimais, use Math.round(12.3456 * 100) / 100.0, que produz 12.35. A etapa de multiplicação coloca a casa dos centésimos no limite dos números inteiros. Dividir por 100.0 reduz a escala por meio de divisão em ponto flutuante; dividir pelo inteiro 100 descartaria a fração e produziria 12. Se apenas o texto exibido precisar de arredondamento, printf pode formatar diretamente o valor original.

Principais conclusões

  • Um double mantém resultados fracionários, mas aproxima muitas frações decimais.
  • Math.sqrt, Math.pow e Math.PI permitem cálculos geométricos sem importação.
  • round seleciona o inteiro mais próximo; floor e ceil escolhem uma direção.
  • Math.round(double) retorna long, enquanto floor e ceil retornam double.
  • Ao reduzir a escala de um valor arredondado, use um divisor decimal para preservar sua fração.
4

Converta valores entre tipos

Um valor pode passar entre tipos numéricos ou entre números e texto. Cada caminho tem suas próprias regras: algumas conversões numéricas acontecem automaticamente, outras exigem uma conversão explícita, e texto numérico deve ser analisado e convertido antes das operações aritméticas. Acompanhe a conversão no ponto exato em que ela ocorre. Converter depois de uma operação não recupera informações já perdidas, enquanto uma conversão bem-sucedida ainda pode alterar um valor grande ou fracionário.

4.1 Faça conversões de ampliação e conversões explícitas de tipo

Às vezes, Java converte um valor numérico automaticamente. Outras conversões precisam de uma conversão explícita de tipo. Uma conversão explícita altera o tipo de um valor em um ponto específico de uma expressão, então sua posição afeta a resposta.

Amplie automaticamente

O principal caminho de ampliação numérica é byte → short → int → long → float → double. Um char também é ampliado para int e tipos posteriores. Por exemplo, double d = 5; armazena 5.0, e qualquer valor int cabe exatamente em um long.

A ampliação para um tipo em ponto flutuante pode perder precisão. Conversões de int para float, de long para float e de long para double podem arredondar um inteiro grande. A conversão de um int para um double é exata. Por exemplo, (float) 16777217 se torna 1.6777216E7, que representa 16.777.216.

Use uma conversão explícita no estreitamento

Uma conversão explícita de tipo escreve o tipo de destino entre parênteses antes do valor:

int n = (int) 3.99;

O resultado armazenado é 3. Sem (int), Java rejeita a atribuição do literal double a um int. Converter um double finito e dentro do intervalo para um inteiro trunca em direção a zero: (int) -3.99 também produz −3. O truncamento difere do arredondamento; (int) Math.round(3.99) produz 4.

Conversões de estreitamento geralmente precisam de uma conversão explícita. Uma exceção útil permite que uma expressão inteira constante que caiba no tipo inicialize um byte, short ou char. Assim, byte b = 100; é válido sem (byte). Uma variável int não constante não recebe essa exceção para atribuição de constante simplesmente porque seu valor atual cabe no tipo.

Coloque a conversão explícita antes da operação que precisa dela

Considere int sum = 25; e int count = 3;.

ExpressãoO que aconteceResultado
(double) sum / countConverte sum e depois divide com um double.8.333333333333334
(double) (sum / count)Divide inteiros e depois converte o resultado inteiro.8.0

Uma conversão explícita tem precedência maior que a multiplicação e a divisão. Os parênteses determinam se ela se aplica a um operando ou a um cálculo concluído. Converter após a divisão inteira não recupera informações descartadas.

Preveja alterações em caracteres e inteiros de tipos menores

(int) 'A' fornece seu código de caractere, 65. Somar 1 a 'A' produz o int 66. Para transformar o resultado completo novamente em um caractere, escreva (char) ('A' + 1), que produz 'B'. Sem os parênteses externos em torno da soma, a conversão explícita se aplicaria apenas a 'A'.

O estreitamento entre tipos inteiros mantém apenas os bits menos significativos. (byte) 200 se torna −56; (int) 3_000_000_000L se torna −1294967296. Uma conversão explícita permite a conversão, mas não verifica se o valor original cabe no tipo.

A atribuição composta tem uma conversão integrada para o tipo à esquerda. Com int x = 10;, x += 2.7; calcula 12,7 e o converte por estreitamento para 12. A atribuição simples x = x + 2.7; falha porque seu lado direito é double.

Principais conclusões

  • A ampliação é automática, mas algumas conversões para ponto flutuante podem arredondar inteiros grandes.
  • Uma conversão de estreitamento geralmente precisa de conversão explícita; constantes inteiras que cabem no tipo têm uma exceção para atribuição a tipos menores.
  • Uma conversão explícita de decimal para inteiro dentro do intervalo trunca em direção a zero.
  • Converta explicitamente um operando antes da divisão quando a operação precisar manter uma fração.
  • O estreitamento de inteiros pode alterar um valor ao descartar bits mais significativos.
  • A atribuição composta inclui uma conversão de volta para o tipo da variável.

4.2 Converta texto em números e números em texto

Um texto pode conter algarismos sem ser um número. Para calcular com texto digitado ou armazenado, analise-o e converta-o em um tipo numérico. Para construir uma mensagem, converta um valor numérico de volta em texto.

Converta texto antes de calcular

A expressão "42" + 1 produz “421”. Como o operando à esquerda é uma String, + realiza uma concatenação. Integer.parseInt("42") + 1 produz 43 porque a análise e conversão de texto fornece um int antes da adição.

String first = "12";
String second = "30";
int total = Integer.parseInt(first) + Integer.parseInt(second);

Aqui, total contém 42. Unir as cadeias de caracteres originais produziria “1230”. Escolha a conversão com base no uso pretendido do valor, não no fato de seus caracteres parecerem numéricos.

Integer.parseInt(text) retorna um int; Long.parseLong(text) retorna um long. Integer.valueOf("42") retorna um objeto Integer, que Java converte automaticamente para int quando um int é necessário. Para uma operação direta de texto para int, parseInt indica claramente o resultado pretendido.

Converta decimais e valores lógicos

Double.parseDouble("3.75") retorna o double 3,75. Seu formato de texto usa ponto decimal em todos os computadores, independentemente das configurações regionais. Double.parseDouble("3,5") falha. Literais no código-fonte Java também usam ponto, embora métodos de leitura pelo teclado possam seguir uma configuração regional.

Boolean.parseBoolean(text) segue uma regra separada: retorna true para “true” em qualquer combinação de letras maiúsculas e minúsculas, como “TRUE”. Qualquer outro texto retorna false, incluindo “yes”. Ele não interpreta uma palavra afirmativa qualquer como verdadeira.

Reconheça texto numérico inválido

Texto numérico inválido causa uma NumberFormatException durante a execução do programa. Integer.parseInt("4.5") falha porque texto decimal não é uma representação de inteiro. Integer.parseInt("") e Integer.parseInt(" 42") também falham. A mensagem da exceção identifica o texto que não pôde ser convertido.

O tratamento de espaços em branco depende do método de conversão. Double.parseDouble ignora espaços no início e no fim, enquanto Integer.parseInt não. Escolha entradas de teste que revelem essas diferenças ao ler dados do usuário.

Um padrão conveniente de entrada é ler uma linha inteira e convertê-la:

int age = Integer.parseInt(scanner.nextLine());
double height = Double.parseDouble(scanner.nextLine());

Cada chamada consome sua linha inteira, incluindo o terminador de linha. Isso mantém a entrada de texto e de números consistente e evita misturar leituras de unidades de entrada com leituras de linhas inteiras.

Transforme um número em texto

String.valueOf(42), Integer.toString(42) e "" + 42 produzem a String “42”. Double.toString(2.50) produz “2.5”. A escrita decimal original não permanece associada ao número armazenado, então essa conversão não acrescenta um zero ao final para preservá-la.

Use String.format quando precisar de texto armazenado com uma quantidade fixa de casas decimais. Use printf quando quiser exibir diretamente esse texto formatado. Uma conversão numérica explícita ou uma concatenação básica não fornece uma exibição fixa com duas casas.

Principais conclusões

  • Um texto com aparência numérica continua sendo uma String até ser analisado e convertido.
  • Integer.parseInt e Double.parseDouble produzem valores numéricos para operações aritméticas.
  • Double.parseDouble usa ponto decimal independentemente da configuração regional.
  • Texto numérico inválido causa NumberFormatException; a conversão de inteiros rejeita espaços ao redor.
  • Boolean.parseBoolean aceita “true” em qualquer combinação de maiúsculas e minúsculas e retorna false para outros textos.
  • A conversão básica de número para texto não preserva zeros extras ao final.
5

Leia dados de entrada e desenvolva programas completos

A entrada e a saída transformam um cálculo em um programa que alguém pode usar. Associe cada solicitação a uma leitura adequada com Scanner, decida como os decimais serão digitados e escolha rótulos de saída e formatos numéricos claros. Desenvolva um programa completo a partir de um plano de entrada–cálculo–saída e teste-o com resultados calculados à mão. Um programa pode compilar e terminar com sucesso e ainda assim ler a linha errada ou exibir o valor incorreto.

5.1 Leia dados de entrada com Scanner

A entrada pelo teclado chega como texto. Um Scanner pode ler uma linha inteira, uma palavra ou uma palavra convertida em número. Escolha um plano de leitura consistente antes de solicitar valores ao usuário.

Crie um Scanner e leia uma linha
import java.util.Scanner;

public class Greeting {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("What is your name? ");
        String name = scanner.nextLine();
        System.out.println("Hello, " + name + "!");
    }
}

A importação fica antes da classe. A instrução de criação fica dentro de main e conecta o Scanner a System.in. Um Scanner é suficiente para esse programa. nextLine() espera pela linha digitada e retorna seu texto sem a quebra de linha. Digitar “Ada” faz a última instrução exibir “Hello, Ada!”. Usar print para a solicitação mantém a digitação ao lado da pergunta.

Escolha linhas ou unidades de entrada
MétodoO que ele lê
nextLine()O restante da linha atual, sem o terminador
next()A próxima unidade de entrada separada por espaços em branco, como texto
nextInt()A próxima unidade de entrada como int
nextLong()A próxima unidade de entrada como long
nextDouble()A próxima unidade de entrada como double
nextBoolean()A próxima unidade de entrada como valor lógico

Para “Ada Lovelace”, next() retorna “Ada”. Uma chamada posterior de nextLine() retorna “ Lovelace”, incluindo o espaço inicial. Duas chamadas de nextInt() podem ler “3 4” de uma linha. Uma unidade de entrada numérica incompatível com o método, como “4.5” ou “abc” para nextInt(), causa uma InputMismatchException.

Considere o terminador de linha não lido

Suponha que o usuário digite “30”, pressione Enter, depois digite “Ada Lovelace” e pressione Enter. Este código não lê o nome como pretendido:

int age = scanner.nextInt();
String name = scanner.nextLine();

nextInt() consome 30, mas deixa o terminador de linha. nextLine() consome imediatamente o restante vazio dessa mesma linha, então name é "". Acrescente scanner.nextLine(); entre as duas instruções para descartar esse restante antes de ler o nome na próxima linha.

Outra solução é ler cada resposta com nextLine() e converter as linhas numéricas: int age = Integer.parseInt(scanner.nextLine());. Isso evita alternar entre duas unidades de entrada diferentes.

Deixe clara a convenção decimal

nextDouble() segue a configuração regional do Scanner, inicialmente a configuração regional de formatação padrão do computador. Uma configuração com vírgula decimal aceita “3,5” como decimal e rejeita “3.5” neste exemplo. Para ler decimais com ponto de forma consistente, acrescente import java.util.Locale; e crie:

Scanner scanner = new Scanner(System.in).useLocale(Locale.US);

Ler uma linha inteira com Double.parseDouble(scanner.nextLine()) também usa ponto. Alterar a configuração regional do Scanner não altera os literais do código-fonte Java nem a configuração regional usada por chamadas posteriores de printf.

Leia os valores na ordem pedida pelas solicitações. Se você pedir um nome e depois uma idade, a primeira leitura deve armazenar o nome. Uma leitura fora de lugar pode colocar dados na variável errada ou causar um erro de conversão.

Principais conclusões

  • Importe java.util.Scanner antes da classe e crie um Scanner dentro de main.
  • nextLine() lê o restante de uma linha; métodos de leitura de unidades de entrada leem valores separados por espaços em branco.
  • Uma unidade de entrada numérica incompatível causa InputMismatchException.
  • Após ler uma unidade de entrada numérica, consuma o restante da linha antes de ler texto na linha seguinte.
  • useLocale(Locale.US) determina a entrada de decimais com ponto no Scanner; converter linhas é outra opção consistente.
  • Associe as leituras de entrada à ordem das solicitações.

5.2 Formate a saída com printf

A saída formatada controla como os valores aparecem em uma mensagem. printf pode mostrar uma quantidade fixa de casas decimais, acrescentar uma quebra de linha e alinhar valores em colunas sem alterar seus valores armazenados.

Associe marcadores aos valores

Uma cadeia de formatação contém texto comum e especificadores que começam com %. Cada especificador que consome um valor recebe o próximo valor fornecido após a cadeia de formatação:

System.out.printf("%s is %d years old%n", "Ada", 36);

Isso exibe “Ada is 36 years old” e inicia uma nova linha. %s exibe texto ou outro valor como texto, %d exibe um inteiro como int ou long, e %f exibe um valor em ponto flutuante. %n insere uma quebra de linha sem consumir um valor. %% exibe um sinal de porcentagem.

printf não acrescenta uma quebra de linha automaticamente. Inclua %n quando a próxima saída tiver que começar em uma nova linha. A sequência de escape comum \n também representa um caractere de nova linha dentro de texto Java; %n é o separador de linha específico da plataforma usado pelo formatador.

Defina as casas decimais para exibição

%f sem precisão exibe seis casas após o separador decimal: formatar 2.5 produz “2,500000”. A precisão em %.2f solicita duas casas:

System.out.printf("Total: %.2f%n", 12.3456);

Com a formatação dos Estados Unidos, a saída é “Total: 12.35”. O valor é arredondado no texto exibido. Uma variável que contém 12,3456 continua contendo esse valor de trabalho após a exibição.

Para System.out.printf("%d items at %.2f each, total %.2f%n", 3, 1.5, 3 * 1.5);, os valores preenchem os três marcadores em ordem. Com configurações dos Estados Unidos, a saída é “3 items at 1.50 each, total 4.50”.

Alinhe campos com largura

A largura é um tamanho mínimo de campo. %5d alinha um inteiro à direita em pelo menos cinco caracteres; %-6s alinha texto à esquerda em pelo menos seis. %6.1f combina largura 6 com uma casa decimal.

System.out.printf("[%5d][%-6s][%6.1f]%n", 42, "Ada", 9.25);

Com configurações dos Estados Unidos, a saída exata é [ 42][Ada ][ 9.3]. Os colchetes tornam visíveis os espaços de preenchimento. Um valor maior que sua largura ainda é exibido por completo; a largura não corta caracteres.

Um especificador incompatível causa um erro de execução. printf("%d%n", 2.5) compila, mas lança IllegalFormatConversionException porque %d espera um valor inteiro. Valores insuficientes, como em printf("%d %d%n", 2), causam MissingFormatArgumentException.

Escolha entre exibir e armazenar texto

String.format aplica as mesmas regras de formatação, mas retorna uma String:

String line = String.format("%.1f km", 12.345);

Com configurações dos Estados Unidos, line contém “12.3 km”; essa instrução não exibiu nada.

Ambos os métodos de formatação usam a configuração regional padrão, a menos que você informe uma. Acrescente import java.util.Locale; e use System.out.printf(Locale.US, "%.2f%n", 12.3456); para garantir “12.35” em vez de “12,35”, usado por uma configuração regional com vírgula decimal. String.format também pode receber Locale.US primeiro. Exibir um double com println usa ponto independentemente da configuração regional de formatação.

Principais conclusões

  • Associe cada especificador que consome um valor ao próximo valor de tipo adequado.
  • Use %n para uma quebra de linha e %% para um sinal de porcentagem literal.
  • %.2f arredonda o texto exibido para duas casas sem alterar o valor armazenado.
  • A largura preenche um campo até um tamanho mínimo; ela não trunca valores maiores.
  • String.format retorna texto, enquanto printf o exibe.
  • Informe uma configuração regional para controlar o separador decimal na saída formatada.

5.3 Combine entrada, cálculo e saída

Um programa de cálculo completo conecta três etapas: ler as entradas, fazer cálculos com elas e exibir os resultados. Planejar os valores e suas unidades antes de digitar ajuda você a escolher tipos e testar o resultado.

Planeje um programa de tempo de viagem

As entradas são distância em quilômetros e velocidade média em km/h. Dividir a distância pela velocidade fornece o tempo em horas. Ambas as medidas precisam de double para que a divisão possa manter uma fração. A saída será em horas e minutos inteiros, arredondados para o minuto mais próximo.

import java.util.Scanner;

public class TravelTime {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Distance (km): ");
        double distance = Double.parseDouble(scanner.nextLine());
        System.out.print("Speed (km/h): ");
        double speed = Double.parseDouble(scanner.nextLine());
        int totalMinutes = (int) Math.round(distance / speed * 60);
        int hours = totalMinutes / 60;
        int minutes = totalMinutes % 60;
        System.out.println("Travel time: " + hours + " h " + minutes + " min");
    }
}

Para 150 km a 80 km/h, a divisão produz 1,875 hora. A multiplicação por 60 produz 112,5 minutos. Math.round retorna o long 113, e a conversão explícita o converte para int. A divisão inteira e o resto produzem então 1 hora e 53 minutos. A saída é “Travel time: 1 h 53 min”.

Se distância e velocidade fossem ambas int, 150 / 80 * 60 produziria 60. A fração desaparece na divisão, antes da multiplicação. As escolhas de tipos fazem parte do plano, não apenas da instrução final de saída.

Escolha exibição e aritmética separadamente

Para um total de conta de 87,60 dividido entre 4 pessoas, armazene o total em double e a quantidade em int. double share = total / people; produz 21,9. Com a formatação dos Estados Unidos, System.out.printf("Each person pays %.2f%n", share); exibe “Each person pays 21.90”. A formatação fornece a segunda casa decimal sem alterar o cálculo.

Para as notas inteiras 7, 8 e 10, double average = (a + b + c) / 3.0; produz 8.333333333333334, exibido como “8,33” com %.2f. Os parênteses agrupam o total e o divisor decimal mantém sua fração.

Teste com resultados que você conhece

Calcule os resultados esperados antes de executar o programa. Para o tempo de viagem, 120 km a 60 km/h deve produzir 2 h 0 min. Uma distância de 0 km a uma velocidade positiva deve produzir 0 h 0 min. Experimente entradas próximas a um limite de arredondamento e distâncias válidas maiores para exercitar mais do que o cálculo mais simples.

Inclua entradas zero, negativas e grandes ao verificar o comportamento do programa. Decida se cada entrada faz sentido para a tarefa. Uma quantidade de zero pessoas faz total / people produzir Infinity quando total é um double diferente de zero; a divisão inteira por zero lança ArithmeticException. A execução bem-sucedida, por si só, não garante uma resposta útil.

Quando a saída diferir do que você esperava, exiba os valores intermediários ou acompanhe-os em uma tabela. Encontre o primeiro valor incorreto, corrija a instrução responsável e execute novamente os testes conhecidos. Compare espaços e rótulos, além dos números.

Use nomes como totalMinutes, constantes nomeadas como MINUTES_PER_HOUR, unidades nas solicitações e comentários curtos que expliquem a finalidade de um cálculo.

Principais conclusões

  • Liste entradas, saídas, fórmulas, unidades e tipos antes de escrever um programa de cálculo.
  • Mantenha as frações das medidas durante as operações aritméticas e arredonde quando a saída exigir unidades inteiras.
  • Teste entradas comuns, de valor-limite e inadequadas em relação ao comportamento esperado.
  • Acompanhe valores intermediários para localizar a primeira etapa incorreta.
  • Nomes claros, constantes e unidades tornam um programa mais fácil de verificar.

Exercícios resolvidos de Primeiros programas em Java

5 Lições Interativas

1

Construa e execute um pequeno programa de mensagens

13 passos
Acompanhe um programa desde sua estrutura de classe até a saída exata e depois localize a etapa em que ocorre um erro.
  1. 1
    IntroduçãoAcompanhe as instruções a partir de main

    Um programa Java precisa de um ponto de entrada e de uma sequência de instruções. Na forma clássica, uma classe contém main, e main contém as instruções executadas.

    Você construirá um aviso curto, executará o programa e acompanhará a posição da saída em várias chamadas de exibição. A mesma sequência ajuda na depuração: primeiro verifique se o código-fonte compila, depois se é executado e, por fim, se a saída corresponde ao aviso pretendido.

  2. 2
    ExemploColoque o aviso dentro do método

    Comece com esta estrutura completa:

    public class Notice {
        public static void main(String[] args) {
            System.out.println("Studio open");
        }
    }
    

    As chaves externas delimitam a classe; o par interno delimita o método. Java começa pela instrução de exibição dentro de main. Seu ponto e vírgula encerra a instrução, enquanto as chaves de fechamento encerram os dois corpos que a envolvem.

  3. 3
    DicaVerifique os nomes antes de acrescentar código

    Salve a classe pública Notice em Notice.java. Use exatamente o mesmo N maiúsculo. Preserve também System e o nome de método main em minúsculas: Java trata grafias com maiúsculas e minúsculas diferentes como nomes distintos.

    Recue cada corpo aninhado em quatro espaços para que uma chave fora de lugar seja fácil de identificar. Um comentário curto com // pode explicar a razão de uma etapa sem se tornar uma instrução executável.

  4. 4
    DesafioCorrija o método de entrada

    Um arquivo declara corretamente public class Bulletin, mas seu único método é public static void Main(String[] args). Ele compila, mas o inicializador não encontra o método main. Que alteração é necessária?

    ---reveal---

    Altere Main para main. O nome com inicial maiúscula declara um método diferente, então não fornece o ponto de entrada pretendido. O arquivo também deve continuar com o nome Bulletin.java para corresponder à sua classe pública.

  5. 5
    ExplicaçãoCompile e execute o programa do aviso

    Na pasta do código-fonte, digite:

    javac Notice.java
    java Notice
    

    javac verifica o código-fonte e produz o bytecode Notice.class. java inicia a JVM para executar essa classe. Um JDK fornece ambos os comandos; uma IDE executa essas etapas por meio do botão Run. No comando de inicialização da classe compilada, omita a extensão .class. java Notice.java é uma forma separada de executar um arquivo-fonte, disponível desde o Java 11.

  6. 6
    DesafioLeia primeiro o primeiro erro

    Depois de apagar a aspa de fechamento de uma mensagem, uma pessoa vê várias mensagens do compilador nessa linha e em linhas posteriores. Cada instrução posterior deve ser reescrita imediatamente? Explique o próximo passo.

    ---reveal---

    Corrija o primeiro erro fechando o literal de string, salve e compile novamente. Uma aspa não fechada pode fazer o código posterior parecer malformado. Compilar novamente mostra se essas mensagens posteriores desaparecem antes de serem necessárias outras alterações.

  7. 7
    ExemploAcompanhe as duas primeiras chamadas de exibição

    Substitua a mensagem original por:

    System.out.print("Studio ");
    System.out.print(3);
    

    A primeira chamada exibe a palavra e o espaço que vem depois dela. Como print não acrescenta uma quebra de linha, a segunda chamada coloca 3 imediatamente após esse espaço. A saída atual é “Studio 3”, e a próxima chamada ainda continuaria nessa linha. Chamadas de exibição não inserem separadores extras por conta própria.

  8. 8
    ExemploEncerre uma linha e comece outra

    Continue o mesmo programa com:

    System.out.println(" open");
    System.out.println("Welcome");
    

    A primeira chamada acrescenta seu espaço inicial e a palavra “open” à linha existente e depois encerra essa linha. A segunda exibe “Welcome” e encerra a próxima linha. O texto completo é:

    Studio 3 open
    Welcome
    

    Não há linha em branco entre as mensagens; um println() vazio acrescentaria uma.

  9. 9
    Ideia-chaveAspas e sequências de escape determinam o texto

    As aspas determinam se Java exibe texto literal ou avalia código. println("3 + 4") exibe “3 + 4”; println(3 + 4) exibe 7.

    Para incluir uma aspa dentro de um literal, escreva \". Para uma nova linha dentro de um literal, escreva \n; uma tabulação é \t, e uma barra invertida é \\. As sequências de escape se tornam caracteres no texto resultante. Um literal comum deve abrir e fechar na mesma linha do código-fonte.

  10. 10
    DesafioPreveja os limites das linhas

    O que este código exibe?

    System.out.print("A");
    System.out.println("B");
    System.out.println();
    System.out.print("C");
    

    ---reveal---

    A primeira linha é “AB”, a segunda está em branco e a terceira contém “C”. A primeira chamada permanece na sua linha, a seguinte a encerra e o println() vazio fornece outra quebra de linha. Não aparecem espaços entre A e B porque nenhuma instrução exibe um espaço.

  11. 11
    ConexãoLocalize a etapa da falha

    Suponha que um programa de aviso modificado compile, comece a execução e depois pare em uma divisão inteira por zero. Isso é um erro de execução, informado por uma exceção. Se ele terminar, mas identificar uma sala com o número errado, isso será um erro de lógica.

    A compilação verifica as regras de Java; ela não sabe qual sala você pretendia indicar. Determine o aviso esperado antes de testar e compare cada rótulo, valor, espaço e quebra de linha.

  12. 12
    DesafioSepare duas correções

    Um programa inicialmente falha na compilação porque uma instrução de exibição não tem ponto e vírgula. Após essa correção, ele é executado, mas exibe duas mensagens em uma linha quando são necessárias duas linhas. O que deve mudar em cada etapa?

    ---reveal---

    Acrescente o ponto e vírgula para corrigir o erro de compilação. Depois, altere o print da primeira mensagem para println, ou exiba uma quebra de linha nesse ponto, para corrigir a lógica da saída. Verifique a segunda alteração comparando a disposição real das linhas com a esperada.

  13. 13
    RecapitulaçãoVerifique a estrutura, a execução e a saída

    Use a estrutura da classe e de main para localizar as instruções executáveis. Faça o nome da classe pública corresponder ao do arquivo-fonte e depois compile e execute com os comandos adequados.

    Acompanhe as chamadas de exibição seguindo a posição atual da saída: print permanece na linha, println avança. Quando um resultado estiver incorreto, identifique se a compilação falhou, se a execução parou ou se a saída final difere do que você esperava. Cada caso aponta para uma verificação diferente.

2

Acompanhe valores armazenados e construa uma mensagem

12 passos
Acompanhe cópias e atualizações, selecione tipos e veja como o texto altera o significado do sinal de adição.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoAcompanhe valores antes de prever a saída
  2. 2
    ExemploCrie dois valores armazenados independentes
  3. 3
    ExemploAtualize apenas o destino indicado
  4. 4
    DesafioPreserve um valor durante uma troca
  5. 5
    DicaUse final e var com cuidado
  6. 6
    ExplicaçãoEscolha um tipo adequado aos dados
  7. 7
    ExemploDeixe a escrita do literal determinar o tipo
  8. 8
    DesafioAmplie antes da multiplicação
  9. 9
    ExemploConstrua uma mensagem a partir do rastreamento
  10. 10
    DesafioDecida quando o sinal de adição significa soma
  11. 11
    DesafioCombine um valor copiado com uma nova saída
  12. 12
    RecapitulaçãoUse o valor mais recente e o tipo real
3

Divida uma duração e calcule com frações

14 passos
Trabalhe com ordem das operações, unidades de tempo, cálculos decimais e escolhas de arredondamento.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoEscolha a operação adequada à pergunta
  2. 2
    ExplicaçãoAgrupe um cálculo completo
  3. 3
    DesafioCorrija uma expressão de média
  4. 4
    ExemploConte horas completas
  5. 5
    ExemploMantenha os segundos após essas horas
  6. 6
    ExemploExtraia minutos e segundos
  7. 7
    DesafioDivida outra duração
  8. 8
    Ideia-chaveO truncamento segue em direção a zero
  9. 9
    ExemploMantenha a fração de uma medida
  10. 10
    ExplicaçãoUse Math para uma raiz ou potência
  11. 11
    DesafioEscolha a regra de arredondamento
  12. 12
    DicaReduza a escala com um divisor decimal
  13. 13
    DesafioMantenha uma média antes de arredondá-la
  14. 14
    RecapitulaçãoAcompanhe o tipo e o agrupamento em cada operação
4

Converta valores no ponto certo

11 passos
Compare ampliação, conversão explícita, análise e conversão de texto e conversão de número para texto por meio de rastreamentos curtos.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoPergunte qual valor chega à conversão
  2. 2
    ExplicaçãoAmplie um valor numérico automaticamente
  3. 3
    ExemploCompare duas posições de conversão explícita
  4. 4
    DesafioConverta e arredonde um valor negativo
  5. 5
    DicaNão trate uma conversão explícita como verificação de intervalo
  6. 6
    ExemploConverta o texto antes de somar
  7. 7
    ExplicaçãoEscolha o método de conversão adequado ao texto
  8. 8
    DesafioPreveja os resultados da conversão de texto
  9. 9
    ConexãoPrepare texto para exibição
  10. 10
    DesafioAcompanhe toda a sequência de conversões
  11. 11
    RecapitulaçãoEscolha uma conversão adequada à tarefa
5

Leia, calcule, formate e teste

16 passos
Desenvolva um programa de cálculo de uma taxa a partir de uma medida, acompanhando a entrada de linhas inteiras, as cadeias de formatação e testes úteis.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDesenvolva um programa em torno de seus dados
  2. 2
    ExplicaçãoConecte um Scanner à entrada pelo teclado
  3. 3
    ExemploLeia um rótulo como linha inteira
  4. 4
    ExemploConverta linhas numéricas de forma consistente
  5. 5
    DesafioCorrija um rótulo não lido
  6. 6
    DicaDefina explicitamente as convenções de entrada numérica
  7. 7
    ExemploCalcule com os tipos pretendidos
  8. 8
    ExplicaçãoFaça a cadeia de formatação corresponder aos valores
  9. 9
    ExemploExiba uma medida arredondada
  10. 10
    DesafioCorrija o especificador
  11. 11
    ExemploArmazene ou alinhe texto formatado
  12. 12
    ExplicaçãoEscolha testes antes de executar
  13. 13
    DesafioEncontre um defeito de cálculo com um teste
  14. 14
    DicaAcompanhe o primeiro valor inesperado
  15. 15
    DesafioAplique o plano a uma taxa
  16. 16
    RecapitulaçãoVerifique todo o caminho da entrada ao texto

Questões de Primeiros programas em Java

50 Questões de Prática em 5 conjuntos

Conjunto 1: Escolha tipos e conecte entrada e saída10 Questões de Prática

Questão 1 de 10

Em um programa clássico, onde a execução começa?
  1. Na primeira importação.
  2. Na declaração da classe.
  3. Na última instrução de main.
  4. Na primeira instrução de main.
Mostrar respostaOcultar resposta
Resposta: D
O inicializador entra em main e começa a executar sua primeira instrução, continuando pelo método em ordem. Importações e a declaração da classe organizam o código-fonte; elas não são as primeiras instruções executáveis. Começar pela última instrução inverteria a sequência estabelecida pelo programa.

Questão 2 de 10

Um programa compila e termina, mas exibe 4.0 para double average = 19 / 4;. Que tipo de erro explica a média imprecisa?
  1. Um erro de lógica causado pela divisão inteira.
  2. Um erro de execução causado pela divisão inteira.
  3. Um erro de compilação causado pela atribuição.
  4. Um erro de execução causado pelo estouro.
Mostrar respostaOcultar resposta
Resposta: A
O programa tem um erro de lógica: 19 / 4 é concluído como divisão inteira e produz 4, que é armazenado como 4.0. Esse código é válido e não para com uma exceção. Um destino double não torna fracionária a divisão anterior; um operando deve ser alterado antes da operação.

Questão 3 de 10

Quais são os valores de left e right após esta tentativa de troca?

int left = 2;
int right = 7;
left = right;
right = left;
  1. left = 7, right = 2
  2. left = 2, right = 7
  3. left = 7, right = 7
  4. left = 2, right = 2
Mostrar respostaOcultar resposta
Resposta: C
A primeira atribuição substitui o 2 original em left por 7. A atribuição seguinte copia esse 7 atual para right, então ambas as variáveis terminam com 7. Uma troca efetiva precisa preservar o valor original de left em uma variável temporária antes de sobrescrevê-lo; a tentativa de troca já o perdeu.

Questão 4 de 10

Um programa deve armazenar exatamente a contagem inteira 4.200.000.001. Qual declaração faz isso?
  1. int count = 4_200_000_001;
  2. long count = 4_200_000_001L;
  3. long count = 4_200_000_001;
  4. float count = 4_200_000_001f;
Mostrar respostaOcultar resposta
Resposta: B
A contagem excede o intervalo de int, então use long e marque o literal com L. Um destino long, por si só, não torna válido um literal inteiro grande demais e sem sufixo. Um float tem intervalo amplo, mas precisão insuficiente para armazenar exatamente todos os inteiros desse tamanho.

Questão 5 de 10

Uma gravação dura 247 segundos. Quais valores de minutos e segundos resultam da divisão em minutos completos e segundos restantes?
  1. 4 min 11 s
  2. 5 min 7 s
  3. 4 min 7 s
  4. 4 min 47 s
Mostrar respostaOcultar resposta
Resposta: C
A divisão inteira 247 / 60 produz 4 minutos completos. O resto 247 % 60 é 7 segundos, pois quatro minutos correspondem a 240 segundos. Manter os dois últimos algarismos decimais como 47 confunde a notação de base dez com unidades de tempo, que agrupam segundos em conjuntos de sessenta.

Questão 6 de 10

Qual valor Math.floor(-4.2) retorna?
  1. -4.0
  2. -5.0
  3. 4.0
  4. 5.0
Mostrar respostaOcultar resposta
Resposta: B
Math.floor retorna o maior double de valor inteiro que não supera seu argumento, então −4,2 se torna −5,0. O truncamento em direção a zero produziria −4, mas a função piso escolhe a direção do infinito negativo. O valor de retorno continua sendo double, por isso o resultado é mostrado com .0.

Questão 7 de 10

String quantity = "16"; Qual expressão produz o inteiro 21 a partir desse texto?
  1. quantity + 5
  2. (int) quantity + 5
  3. Integer.toString(16) + 5
  4. Integer.parseInt(quantity) + 5
Mostrar respostaOcultar resposta
Resposta: D
Integer.parseInt(quantity) converte o texto de algarismos no int 16, e a adição numérica produz 21. Já quantity + 5 concatena e produz “165”. Uma conversão numérica explícita não pode analisar e converter uma String, enquanto Integer.toString converte na direção oposta, de número para texto.

Questão 8 de 10

Um usuário digita o nome completo “Noor van Dijk” em uma nova linha de entrada. Qual chamada de Scanner lê o nome inteiro em uma String?
  1. scanner.nextLine()
  2. scanner.next()
  3. scanner.nextInt()
  4. scanner.nextBoolean()
Mostrar respostaOcultar resposta
Resposta: A
nextLine() lê todo o texto restante na linha atual, então inclui todas as palavras do nome e os espaços entre elas. next() lê apenas uma unidade de entrada, “Noor”, deixando o restante sem leitura. Os métodos numéricos e booleanos não são compatíveis com esse texto e não conseguem ler o nome completo.

Questão 9 de 10

Com a formatação dos Estados Unidos, que texto System.out.printf("Mass: %.2f kg%n", 6.375); exibe antes da quebra de linha?
  1. Mass: 6.37 kg
  2. Mass: 6.375 kg
  3. Mass: 6.38 kg
  4. Mass: 6.375000 kg
Mostrar respostaOcultar resposta
Resposta: C
A precisão .2 solicita dois algarismos após o ponto decimal e arredonda o valor exibido, então o texto é “Mass: 6.38 kg”. Manter o valor 6,375 na exibição ignora a precisão solicitada. Truncar para “6.37” também deixa de considerar o arredondamento do formatador; o valor numérico passado à chamada não é alterado.

Questão 10 de 10

Um programa de velocidade usa int km = 45; int minutes = 50; double speed = km / minutes * 60;. Ele exibe zero. Qual substituição calcula a velocidade em km/h preservando as entradas?
  1. double speed = (double) km / minutes * 60;
  2. double speed = (double) (km / minutes) * 60;
  3. double speed = km / minutes * 60.0;
  4. double speed = km / (minutes * 60.0);
Mostrar respostaOcultar resposta
Resposta: A
A distância deve ser dividida com aritmética em ponto flutuante antes da conversão de quilômetros por minuto para quilômetros por hora. Converter km primeiro produz 0,9, e multiplicar por 60 produz 54,0 km/h. Introduzir um double apenas na multiplicação final é tarde demais: a divisão inteira 45 / 50 já se tornou zero.
Conjunto 2: Leia e acompanhe seu primeiro código Java10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

O que System.out.println("Seats: " + 6 + 2); exibe?
  1. Seats: 8
  2. Seats: 62
  3. Seats: 6 2
  4. Seats: 6+2
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Qual valor é atribuído por int result = 18 - 6 / 3 * 2;?
  1. 14
  2. 8
  3. 16
  4. 2
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Qual é o valor da expressão Java -11 / 4?
  1. -2.75
  2. -3
  3. 2
  4. -2
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Com int total = 19; int groups = 4;, qual expressão produz um quociente fracionário?
  1. (double) (total / groups)
  2. (double) total / groups
  3. total / (int) groups
  4. (int) (total / 4.0)
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um programa clássico declara public class TrailLog. Qual deve ser o nome de seu arquivo-fonte?
  1. TrailLog.txt
  2. TrailLog.class
  3. TrailLog.java
  4. TrailLog
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

javac Desk.java é executado com sucesso. Qual comando no terminal inicia a classe compilada?
  1. java Desk
  2. java Desk.class
  3. javac Desk
  4. Desk.class
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Qual é o texto exato exibido, com / representando uma quebra de linha?

System.out.print("Gate ");
System.out.println(4);
System.out.print("Open");
  1. Gate /4/Open
  2. Gate4/Open
  3. Gate 4Open
  4. Gate 4/Open
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Que valor saved contém após estas instruções?

int stock = 8;
int saved = stock;
stock = stock + 6;
  1. 14
  2. 8
  3. 6
  4. 22
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Qual sufixo torna 4.25 um literal float em Java?
  1. L
  2. d
  3. f
  4. Nenhum sufixo
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um Scanner recebe “27”, Enter, “Mina Chen”, Enter. O que este código exibe?

int age = scanner.nextInt();
scanner.nextLine();
String first = scanner.next();
String rest = scanner.nextLine();
System.out.println(age + ":" + first + ":" + rest);
  1. 27:Mina:Chen
  2. 27::Mina Chen
  3. 27:Mina: Chen
  4. 27:Mina Chen:
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 3: Acompanhe cálculos e resultados formatados10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um temporizador armazena int seconds = 7_489;. Qual par de expressões fornece as horas completas e os minutos inteiros restantes dentro da hora atual?
  1. seconds / 3600, seconds / 60
  2. seconds % 3600, seconds / 60
  3. seconds / 3600, seconds % 60
  4. seconds / 3600, seconds % 3600 / 60
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Qual literal de string Java exibe o texto Path: C:\Work com exatamente uma barra invertida?
  1. "Path: C:\Work"
  2. "Path: C:\\Work"
  3. "Path: C:/Work"
  4. "Path: C:\nWork"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

O que System.out.println(3 + 4 + " / " + 3 * 4); exibe?
  1. 7 / 12
  2. 7 / 34
  3. 34 / 34
  4. 34 / 12
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Qual valor é exibido?

int value = 20;
value -= 3 * 2;
value /= 4;
System.out.println(value);
  1. 8
  2. 3.5
  3. 7
  4. 3
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Qual valor é armazenado por double value = Math.round(8.276 * 100) / 100;?
  1. 8.28
  2. 8.27
  3. 8.0
  4. 828.0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Qual valor int resulta de (int) -6.8?
  1. -7
  2. -6
  3. 6
  4. 7
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

O que acontece quando Integer.parseInt(" 58") é avaliado?
  1. Retorna o int 58.
  2. Retorna a String “58”.
  3. Lança InputMismatchException.
  4. Lança NumberFormatException.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

A entrada é “Lina Park” seguida de Enter. Qual String rest recebe?

String first = scanner.next();
String rest = scanner.nextLine();
  1. " Park"
  2. "Park"
  3. ""
  4. "Lina Park"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Com a formatação dos Estados Unidos, qual texto exato é exibido por System.out.printf("[%4d][%-5s]", 7, "Oak");?
  1. [7 ][Oak ]
  2. [ 7][ Oak]
  3. [ 7][Oak ]
  4. [ 7][Oak ]
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um programa recebe 10,5 litros divididos igualmente entre 4 recipientes. Ele deve manter a parcela fracionária para uso posterior e exibir “2.63 L” com a formatação dos Estados Unidos. Qual cálculo e saída atendem às duas necessidades?
  1. int share = (int) (10.5 / 4); System.out.printf(Locale.US, "%.2f L", (double) share);
  2. double share = 10.5 / 4; System.out.printf(Locale.US, "%.2f L", share);
  3. double share = Math.round(10.5 / 4); System.out.printf(Locale.US, "%.2f L", share);
  4. double share = 10.5 / 4; System.out.printf(Locale.US, "%d L", share);
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 4: Encontre a primeira etapa que dá errado10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Qual sinal de pontuação encerra a instrução Java System.out.println("Ready")?
  1. Uma chave de fechamento: }
  2. Dois-pontos: :
  3. Um ponto e vírgula: ;
  4. Uma vírgula: ,
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Após apagar uma chave de fechamento, uma pessoa vê vários erros do compilador em linhas posteriores. Qual é a melhor próxima ação?
  1. Examinar o primeiro erro e as chaves próximas, corrigir a chave ausente e compilar novamente.
  2. Corrigir primeiro o último erro e depois alterar todas as linhas anteriores indicadas pelo compilador.
  3. Executar repetidamente a última classe compilada até as mensagens do compilador desaparecerem.
  4. Renomear a classe e executá-la antes de verificar novamente o código-fonte salvo.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

O que acontece após var count = 6; quando o mesmo método executa count = 6.5;?
  1. A variável muda de int para double.
  2. O decimal é armazenado como 6 sem aviso.
  3. O programa compila, mas para na execução.
  4. A compilação falha porque count é int.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um contador usa int edge = 70_000; long area = edge * edge;. A área armazenada está incorreta. Qual substituição calcula o produto inteiro exato mantendo edge como int?
  1. long area = (long) (edge * edge);
  2. long area = (long) edge * edge;
  3. long area = (int) edge * edge;
  4. long area = edge * edge + 0L;
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

O que este código exibe?

int width = 12;
int height = 7;
int total = 2 * (width + height);
total -= 5;
double part = total / 4;
System.out.println(part);
  1. 8.25
  2. 9.0
  3. 8.0
  4. 6.0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Um triângulo retângulo tem catetos de 5 cm e 12 cm. Qual valor Math.sqrt(5 * 5 + 12 * 12) retorna?
  1. 13.0
  2. 17.0
  3. 169.0
  4. 60.0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

O que é exibido?

int value = 9;
value += 2.8;
double result = value / 4;
System.out.println(result);
  1. 2.95
  2. 2.75
  3. 3.0
  4. 2.0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

O que Boolean.parseBoolean("Yes") retorna?
  1. true, porque Yes é afirmativo.
  2. false, porque o texto não é true.
  3. Lança NumberFormatException.
  4. Lança InputMismatchException.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um teste de um conversor de segundos usa 61 segundos e espera “1 min 1 s”. O programa exibe “1 min 61 s”. Ele usa minutes = totalSeconds / 60; seconds = totalSeconds;. Qual correção ajusta o cálculo?
  1. seconds = totalSeconds / 60;
  2. seconds = minutes % 60;
  3. seconds = totalSeconds % 60;
  4. seconds = totalSeconds - minutes;
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um Scanner usa Locale.US e lê duas linhas com double mass = scanner.nextDouble(); String label = scanner.nextLine();. A entrada é “2.75”, Enter, “Sample B”, Enter. Qual alteração preserva os dois valores pretendidos?
  1. Usar next() para o rótulo após a leitura numérica.
  2. Remover Locale.US e manter as duas leituras iguais.
  3. Ler o rótulo duas vezes e concatenar os resultados.
  4. Ler a massa com Double.parseDouble(scanner.nextLine()).
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 5: Combine as regras no rastreamento de programas completos10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

O que este código exibe?

int a = 4;
int b = 7;
String text = "R=" + a + b;
a += 2;
text += ":" + (a + b);
System.out.println(text);
  1. R=47:13
  2. R=11:13
  3. R=67:13
  4. R=47:67
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Uma oficina tem 83 peças. Cada bandeja comporta 15 peças. Quantas bandejas completas e peças restantes há?
  1. 5 bandejas e 3 peças
  2. 6 bandejas e 8 peças
  3. 6 bandejas e 7 peças
  4. 5 bandejas e 8 peças
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Qual valor é exibido?

int number = 6_843;
int last = number % 10;
number /= 10;
int next = number % 10;
System.out.println(last * 10 + next);
  1. 34
  2. 43
  3. 84
  4. 33
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Qual expressão converte de volta no caractere 'E' o resultado da adição de 2 ao código de caractere de 'C'?
  1. (char) 'C' + 2
  2. (char) ('C' + 2)
  3. (int) ('C' + 2)
  4. "C" + 2
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

O que este código exibe?

int total = 23;
int count = 4;
double a = (double) (total / count);
double b = (double) total / count;
System.out.println((int) (b - a) + ":" + b);
  1. 1:5.75
  2. 0:5.0
  3. 0:5.75
  4. 1:5.0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Qual sequência de escape coloca uma aspa dupla dentro de um literal de string Java comum?
  1. \n
  2. \t
  3. \"
  4. \\
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um Scanner que usa Locale.US recebe “3 2.5”, Enter, “West Lab”, Enter. Quais valores name e full recebem?

int count = scanner.nextInt();
double mass = scanner.nextDouble();
String name = scanner.nextLine();
String full = scanner.nextLine();
  1. name = "West", full = " Lab"
  2. name = "West Lab", full = ""
  3. name = "", full = "West"
  4. name = "", full = "West Lab"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Com a formatação dos Estados Unidos, qual texto é armazenado em line?

String line = String.format("%d%% / %.1f", 25, 4.25);
  1. 25% / 4.2
  2. 25% / 4.3
  3. 25%% / 4.3
  4. 25% / 4.250000
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um programa lê duas notas inteiras de teste em linhas separadas, 11 e 14. Ele deve armazenar a média fracionária e exibir “Mean: 12.50” com uma quebra de linha final, usando um ponto em todos os computadores. Qual código de entrada, cálculo e saída atende a esses requisitos? Um Scanner chamado scanner está pronto, e Locale está importado.
  1. int a = scanner.nextInt(); int b = scanner.nextInt(); double mean = (a + b) / 2; System.out.printf(Locale.US, "Mean: %.2f%n", mean);
  2. int a = Integer.parseInt(scanner.nextLine()); int b = Integer.parseInt(scanner.nextLine()); double mean = (a + b) / 2.0; System.out.printf("Mean: %.2f%n", mean);
  3. int a = Integer.parseInt(scanner.nextLine()); int b = Integer.parseInt(scanner.nextLine()); double mean = (a + b) / 2.0; System.out.printf(Locale.US, "Mean: %.2f%n", mean);
  4. int a = Integer.parseInt(scanner.nextLine()); int b = Integer.parseInt(scanner.nextLine()); double mean = (a + b) / 2.0; System.out.println("Mean: " + mean);
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um programa informa o tempo de viagem de um percurso em horas inteiras e minutos restantes, arredondado para o minuto mais próximo. Para 121,5 km percorridos a uma velocidade constante de 54 km/h, qual saída ele deve produzir?
  1. 2 h 15 min
  2. 2 h 25 min
  3. 2 h 0 min
  4. 3 h 0 min
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

75 Termos-Chave, cada um com sua definição

A

Análise e conversão de texto (parsing)
A análise e conversão de texto interpreta texto de acordo com um formato e o converte em um valor utilizável, como int ou double.
Converter a String “72” permite que um programa some 8 numericamente em vez de construir o texto “728”.
Aproximação em ponto flutuante
Uma aproximação em ponto flutuante é um valor binário representável próximo, usado quando uma fração decimal não pode ser armazenada exatamente.
Uma pequena sequência decimal extra ao final de 1.1 * 3 revela a aproximação em ponto flutuante no resultado exibido.
Arredondamento
O arredondamento substitui um valor por um valor próximo em uma precisão escolhida; Math.round usa o inteiro mais próximo, com empates para cima.
O arredondamento de um tempo para minutos inteiros pode ocorrer após o cálculo da duração como double em minutos.
Atribuição
Uma atribuição avalia uma expressão à direita e armazena seu valor na variável ou em outro local à esquerda.
Após count = count + 2;, count contém dois a mais que o valor que tinha antes dessa instrução.
Atribuição composta
Uma atribuição composta combina uma operação com uma atribuição e inclui a conversão de volta para o tipo da variável à esquerda.
A instrução total += 5; aumenta um total int em 5 e armazena o valor atualizado em total.

B

Bloco
Um bloco é um grupo de instruções delimitado por chaves correspondentes, permitindo que Java as trate como um corpo.
As chaves após o cabeçalho de main envolvem as instruções que pertencem ao corpo desse método.
Bytecode
Bytecode é a forma compilada de instruções armazenada em arquivos Java .class e executada por uma Máquina Virtual Java adequada.
Uma compilação bem-sucedida cria bytecode que o inicializador java pode executar por meio da JVM.

C

Cadeia de caracteres (String)
Uma String é um tipo de classe Java para uma sequência de caracteres de texto, incluindo a sequência vazia válida escrita como "".
Uma String pode conter o rótulo “Room 204” sem tratar seus algarismos como um número para operações aritméticas.
Cadeia de caracteres vazia
Uma cadeia de caracteres vazia é uma String sem caracteres, escrita como duas aspas duplas adjacentes sem nada entre elas.
Começar com "" + 'A' + 'B' faz as adições construírem texto e produz a String “AB”.
Cadeia de formatação
Uma cadeia de formatação combina texto literal com especificadores iniciados por porcentagem que controlam onde e como os valores fornecidos aparecem.
A cadeia de formatação "Mass: %.2f kg%n" coloca uma medida com duas casas decimais entre seu rótulo e sua unidade.
Caso de teste
Um caso de teste especifica entradas e um resultado esperado para que o comportamento real de um programa possa ser verificado em relação a uma resposta conhecida.
O caso de teste 120 km a 60 km/h espera 2 h 0 min de um programa de conversão de tempo de viagem.
Classe
Uma classe é uma estrutura Java nomeada cujo corpo contém membros como métodos; um primeiro programa clássico declara uma classe.
A declaração public class Greeting abre a classe que contém o método main do programa.
Classe Math
A classe Math fornece métodos estáticos e constantes prontos para trabalho numérico, incluindo raízes, potências e arredondamento.
A chamada Math.sqrt(81) encontra uma raiz quadrada sem exigir uma importação ou definição de método.
Classe Scanner
Um Scanner é uma classe Java que lê entrada como linhas ou unidades de entrada e pode converter essas unidades em valores primitivos, como números.
Um Scanner conectado a System.in pode ler o nome de um usuário e as medidas necessárias para um programa.
Código-fonte
Código-fonte é o texto Java legível por pessoas, salvo em um arquivo .java antes de o compilador traduzi-lo para execução.
Editar uma mensagem no código-fonte altera o próximo programa compilado depois que você salva e compila.
Comentário
Um comentário é um texto explicativo no código-fonte ignorado pelo compilador, escrito após // ou entre /* e */.
O comentário // Convert to minutes explica por que um cálculo de tempo multiplica um valor em horas por 60.
Compilador
Um compilador verifica o código-fonte em relação às regras da linguagem e traduz o código válido para outra forma, como bytecode Java.
Executar javac Notice.java invoca o compilador, que informa um erro se um ponto e vírgula estiver faltando.
Concatenação
A concatenação une valores em uma nova String, convertendo um operando que não é String em texto quando o outro operando é uma String.
A concatenação "Count: " + 8 constrói uma mensagem contendo um rótulo, um espaço e um algarismo.
Configuração regional (locale)
Uma configuração regional é uma configuração de idioma e região que controla convenções como o separador decimal na entrada e na formatação numéricas.
Configurar um Scanner para Locale.US torna a entrada decimal com ponto consistente em diferentes computadores.
Constante
Uma constante é um valor fixo; uma variável Java final pode receber um valor uma vez e não pode receber uma nova atribuição depois.
A constante MINUTES_PER_HOUR dá ao número 60 um nome útil em cálculos de conversão de tempo.
Conversão de ampliação
Uma conversão de ampliação é uma conversão numérica automática pelos caminhos de tipos permitidos por Java, como de int para long ou double.
Atribuir uma contagem int a uma medida double a converte automaticamente, produzindo uma forma decimal.
Conversão de estreitamento
Uma conversão de estreitamento passa para uma representação numérica mais restrita, como de double para int, e pode perder informações.
Converter 6,75 para int é estreitamento porque o destino não consegue manter sua parte fracionária.
Conversão explícita de tipo (cast)
Uma conversão explícita de tipo solicita uma conversão de tipo colocando o tipo de destino entre parênteses antes do valor convertido.
Em (double) total / count, a conversão explícita altera o tipo de um operando antes de a divisão ser realizada.

D

Declaração
Uma declaração apresenta o nome e o tipo de uma variável; ela também pode incluir um inicializador que fornece um valor inicial.
A declaração int count; apresenta um nome, mas count ainda precisa de um valor antes de ser lido.
Decremento
Um decremento diminui o valor de uma variável em uma unidade; o operador -- de Java realiza essa atualização sem uma atribuição de subtração separada.
A instrução secondsLeft--; reduz o número armazenado de segundos restantes em exatamente uma unidade.
Dividendo
Um dividendo é o valor que está sendo dividido, escrito à esquerda de / ou % em uma expressão Java de divisão com dois operandos.
Em -11 % 4, o dividendo negativo explica por que o resto diferente de zero também é negativo.
Divisão inteira
A divisão inteira divide dois operandos inteiros e descarta qualquer parte fracionária do quociente em direção a zero.
A expressão Java 23 / 5 produz 4 grupos completos, deixando a fração fora do quociente.

E

Erro de compilação
Um erro de compilação é uma violação detectada enquanto Java verifica o código-fonte, impedindo que ele seja compilado com sucesso.
Um literal de string comum não fechado produz um erro de compilação antes que o programa possa ser executado.
Erro de execução
Um erro de execução é uma falha durante a execução de um programa, frequentemente informada como uma exceção que interrompe o programa em execução.
Dividir por uma variável inteira que contém zero produz um erro de execução na instrução de divisão.
Erro de lógica
Um erro de lógica é um engano que faz um programa produzir um resultado incorreto mesmo que ele compile e conclua a execução.
Exibir uma média de 4,0 quando o resultado esperado é 4,75 revela um erro de lógica no cálculo.
Especificador de formato
Um especificador de formato é uma instrução iniciada por porcentagem dentro de uma cadeia de formatação, como %d para um inteiro ou %n para uma quebra de linha.
Cada %f consome um valor em ponto flutuante, enquanto %n acrescenta um separador de linha sem consumir um valor.
Estouro de inteiro (integer overflow)
O estouro de inteiro ocorre quando um cálculo inteiro excede o intervalo de seu tipo e dá a volta para um valor diferente.
Multiplicar dois valores int grandes pode causar estouro antes de seu produto ser atribuído a uma variável long.
Exceção InputMismatchException
Uma InputMismatchException é uma exceção de execução de uma leitura de unidade de entrada por Scanner quando a unidade não é compatível com o tipo solicitado.
Digitar “3.5” para uma chamada de nextInt() causa InputMismatchException porque é necessário um inteiro.
Exceção NumberFormatException
Uma NumberFormatException é uma exceção de execução lançada quando a análise e conversão numérica não consegue converter o texto fornecido para o tipo solicitado.
Tentar converter “eight” com Integer.parseInt causa NumberFormatException durante a execução.
Expressão
Uma expressão é um código Java que calcula um valor ou realiza uma operação, como somar dois valores ou chamar um método.
A expressão width * height calcula uma área que pode ser atribuída ou passada a uma chamada de exibição.

F

Função piso (floor)
O piso de um valor é o maior número de valor inteiro que não supera esse valor; Math.floor o retorna como double.
Para uma fração negativa como -4,2, o piso é -5,0, que está abaixo dela na reta numérica.
Função teto (ceiling)
O teto de um valor é o menor número de valor inteiro que não é menor que esse valor; Math.ceil o retorna como double.
Para 4,2 grupos, o teto é 5,0, representando o próximo número inteiro na direção crescente.

I

Incremento
Um incremento aumenta o valor de uma variável em uma unidade; o operador ++ de Java realiza essa atualização em uma única instrução.
Uma instrução independente count++; altera uma contagem armazenada de 8 para 9 antes de a instrução seguinte ser executada.
Inicialização
A inicialização dá a uma variável seu primeiro valor, frequentemente na mesma instrução que declara o nome e o tipo da variável.
A linha double speed = 72.5; declara speed e a inicializa com uma medida em km/h.
Instrução
Uma instrução é um comando Java, como uma atribuição ou uma chamada de método; uma instrução de exibição termina com ponto e vírgula.
A linha System.out.println("Ready"); é uma instrução que exibe uma mensagem e uma quebra de linha.

K

Kit de Desenvolvimento Java (JDK)
O JDK, ou Kit de Desenvolvimento Java, é o conjunto de ferramentas de software que fornece ferramentas de desenvolvimento Java, incluindo javac e java.
Um computador precisa de um JDK para compilar o código-fonte em um terminal e depois iniciar o programa resultante.

L

Largura do campo
A largura do campo é o número mínimo de caracteres reservados para um valor formatado, com espaços acrescentados quando o valor é menor.
Formatar 7 com %4d produz três espaços iniciais antes do algarismo para preencher o campo de quatro caracteres.
Literal
Um literal é um valor escrito diretamente no código-fonte, cuja forma e cujo sufixo determinam o tipo desse valor escrito.
Os literais 8, 8L e 8.0 expressam quantidades semelhantes, mas têm os tipos int, long e double.
Literal de string
Um literal de string é um texto escrito entre aspas duplas no código-fonte Java, com sequências de escape para caracteres especiais.
O literal de string "Hello, team" inclui uma vírgula e um espaço que aparecem exatamente na saída.

M

Máquina Virtual Java (JVM)
A JVM, ou Máquina Virtual Java, é o sistema de execução que executa bytecode Java em um determinado computador.
O mesmo arquivo de classe compatível pode ser executado em diferentes sistemas operacionais que tenham JVMs adequadas.
Método Double.parseDouble
O método Double.parseDouble converte texto válido de ponto flutuante em double usando ponto decimal independentemente da configuração regional.
Uma linha inteira de entrada contendo “2.75” pode ser convertida em double em sistemas com ponto ou vírgula decimal.
Método Integer.parseInt
O método Integer.parseInt converte texto inteiro válido em int e rejeita texto inválido com NumberFormatException.
Integer.parseInt("72") retorna 72, mas acrescentar um espaço inicial torna esse texto inteiro inválido.
Método main
O método main é o método de entrada em que o inicializador Java começa a executar as instruções de um pequeno programa.
Colocar duas instruções de exibição dentro de main faz suas mensagens aparecerem na ordem em que foram escritas.
Método nextLine
O método nextLine lê o texto restante na linha de entrada atual e consome seu terminador sem retorná-lo.
Após uma unidade de entrada inteira no fim de uma linha, nextLine() pode retornar uma String vazia imediatamente.
Método print
O método print escreve um valor na saída sem acrescentar uma quebra de linha, deixando a próxima saída na mesma linha.
Usar print("Name: ") permite que um usuário digite uma resposta diretamente ao lado da solicitação na tela.
Método printf
O método printf escreve valores de acordo com uma cadeia de formatação e acrescenta uma quebra de linha apenas se essa cadeia solicitar uma.
Usar printf("%d items%n", 8) exibe a contagem, a palavra “items” e um separador de linha final.
Método println
O método println escreve um valor seguido de uma quebra de linha; sem argumento, escreve apenas a quebra de linha.
Duas chamadas sucessivas de println exibem duas linhas separadas mesmo quando seus literais não contêm quebras de linha.
Método String.format
O método String.format aplica uma cadeia de formatação e retorna o texto resultante em vez de exibi-lo diretamente.
Um programa pode armazenar String.format(Locale.US, "%.1f km", 8.25) e exibir esse texto depois.

N

Não é um número (NaN)
NaN, que significa “não é um número”, é um resultado especial de ponto flutuante para uma operação numérica indefinida, como zero dividido por zero.
O cálculo double 0.0 / 0 produz NaN em vez de lançar uma exceção de divisão inteira.
Notação científica
A notação científica exibe um número como um coeficiente multiplicado por uma potência de dez, usando E nos valores exibidos por Java.
O valor exibido 1.0E-4 representa 0,0001, então o expoente negativo descreve uma magnitude pequena.

O

Operando
Um operando é um valor ou expressão fornecido a um operador; os tipos dos operandos ajudam a determinar qual operação Java realiza.
Em "N=" + count, o operando String faz o sinal de adição unir texto em vez de somar dois números.

P

Plano de entrada–cálculo–saída
Um plano de entrada–cálculo–saída identifica o que um programa lê, como processa esses valores e quais resultados apresenta.
Uma calculadora de velocidade lê distância e tempo, divide-os usando unidades compatíveis e identifica seu resultado com um rótulo.
Precedência de operadores
A precedência de operadores é a prioridade que determina como as operações são agrupadas quando uma expressão contém operadores diferentes.
A multiplicação tem precedência sobre a adição em 4 + 3 * 2, então o produto é formado primeiro.
Precisão
A precisão descreve quanto detalhe significativo um tipo numérico pode representar; um intervalo amplo não garante valores exatos.
Converter um int grande para float pode reduzir a precisão mesmo que Java permita a conversão de ampliação.
Precisão de formatação
A precisão de formatação controla o detalhe na saída formatada; com %f, ela define o número de algarismos após o separador decimal.
A precisão em %.2f transforma um valor exibido de 4,5 em “4,50” sem alterar a variável numérica.

R

Resto
Um resto é o valor que sobra após a divisão inteira; o operador % de Java fornece um resultado diferente de zero com o sinal do dividendo.
Com 23 peças acomodadas em grupos de 5, 23 % 5 fornece as 3 peças fora dos grupos completos.

S

Saída esperada
A saída esperada é o texto e os valores que um programa correto deve produzir para entradas especificadas, determinados antes do teste.
Comparar a saída esperada com a saída real pode revelar um número incorreto, uma unidade ausente ou um espaço extra.
Sequência de escape
Uma sequência de escape é um código iniciado por barra invertida dentro de um literal que representa um caractere, como uma nova linha ou uma aspa.
A sequência de escape permite que uma chamada de exibição coloque a próxima parte de sua mensagem em outra linha.

T

Tabela de rastreamento
Uma tabela de rastreamento registra valores de variáveis após instruções sucessivas para que as alterações possam ser acompanhadas sem executar o código.
Uma tabela de rastreamento de uma troca mostra qual valor original é preservado na variável temporária.
Tipo boolean
O tipo boolean armazena um dos dois valores lógicos, true e false, e não aceita números como substitutos.
A declaração boolean isMember = true; armazena um valor lógico sem usar aspas ou um número.
Tipo char
O tipo char armazena uma unidade de código UTF-16 de 16 bits, escrita como literal entre aspas simples e numerada de 0 a 65.535.
O caractere '7' tem código 55, então armazená-lo como char não o torna o valor inteiro 7.
Tipo double
O tipo double armazena valores binários em ponto flutuante de 64 bits, geralmente mantendo cerca de 15–17 algarismos decimais significativos.
Uma distância de 18,75 km pode ser armazenada como double para que operações aritméticas posteriores mantenham resultados fracionários.
Tipo float
O tipo float armazena valores binários em ponto flutuante de 32 bits com cerca de sete algarismos decimais significativos de precisão.
O sufixo f em 2.75f marca um literal float, enquanto 2.75 sem sufixo é um literal double.
Tipo int
O tipo int armazena números inteiros com sinal de 32 bits, de −2.147.483.648 a 2.147.483.647.
Uma pequena contagem de estoque cabe em um int, mas uma contagem acima de seu máximo precisa de um tipo inteiro maior.
Tipo long
O tipo long armazena números inteiros com sinal de 64 bits e é útil quando um inteiro exato pode exceder o intervalo de int.
O sufixo em 5_000_000_000L cria um literal que pode inicializar uma grande contagem inteira.
Tipo primitivo
Um tipo primitivo é um dos oito tipos de valores internos de Java: byte, short, int, long, float, double, char ou boolean.
Uma contagem armazenada como int usa um tipo primitivo, enquanto um nome armazenado como String usa um tipo de classe.
Truncamento
O truncamento descarta a parte fracionária em direção a zero quando um valor em ponto flutuante dentro do intervalo é convertido em inteiro.
Converter -8,6 para int produz -8 por truncamento, enquanto arredondar para baixo produziria -9.

U

Unidade de entrada (token)
Uma unidade de entrada é uma parte da entrada separada por um delimitador; um Scanner padrão usa espaços em branco para separar suas unidades de entrada.
A entrada “4 7” contém duas unidades de entrada numéricas que duas chamadas sucessivas de nextInt() podem ler.

V

Valor intermediário
Um valor intermediário é um resultado produzido durante um cálculo antes da resposta final, útil para acompanhar onde um erro começa.
Exibir o valor intermediário totalMinutes pode mostrar se uma divisão incorreta do tempo começou antes da divisão.
Variável
Uma variável é um espaço de armazenamento nomeado para um valor de determinado tipo, permitindo que instruções posteriores leiam ou atualizem o valor armazenado.
A variável distanceKm armazena uma medida que um cálculo posterior de tempo divide pela velocidade.

Sobre esta aula

Por StudeliRelatar um erro

Crie seus próprios Materiais de Estudo

Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.

Começar