- Aprender
- Computação e TI
- Programação
- Programação orientada a objetos com Java
- Primeiros programas em Java
Primeiros programas em Java
BásicoAula 1 de 11 do curso Curso de Programação orientada a objetos com Java
O que você vai aprender
- 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 mainReconheç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 errosTransforme 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 printlnExiba 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.
- Estruture um programa em torno do método main
- 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-asCrie 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 literaisEscolha 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çãoArmazene 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.
- Declare variáveis, atribua valores e atualize-as
- 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ênciaCombine 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 restoPreveja 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 MathFaç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.
- Escreva expressões respeitando os operadores e sua precedência
- 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 tipoDistinga 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 textoTransforme 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.
- Faça conversões de ampliação e conversões explícitas de tipo
- 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 ScannerCrie 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 printfExiba 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ídaPlaneje, escreva e teste programas completos que leem valores, fazem cálculos com os tipos adequados e exibem resultados claros.
- Leia dados de entrada com Scanner
Guia de estudo de Primeiros programas em Java
1Escreva, 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
Hellodeve ficar emHello.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 problema | O que acontece | Como investigar |
|---|---|---|
| Erro de compilação | O 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ção | A execução para com uma exceção. | Leia a exceção e localize a linha informada. |
| Erro de lógica | A 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.javacompila o código-fonte;java Helloexecuta 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 literal | Caractere exibido |
|---|---|
\n | Nova linha |
\t | Tabulaçã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
printpermanece na linha atual;printlnacrescenta uma quebra de linha após seu valor.- Aspas tornam o texto um literal:
"name"exibe essas letras, enquantonameexibe 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.
2Armazene 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ção | first | second | temp |
|---|---|---|---|
int temp = first; | 4 | 9 | 4 |
first = second; | 9 | 9 | 4 |
second = temp; | 9 | 4 | 4 |
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.
finalimpede uma nova atribuição, evarinfere 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
| Tipo | Armazenamento e valores |
|---|---|
byte | Inteiro de 8 bits: −128 a 127 |
short | Inteiro de 16 bits: −32.768 a 32.767 |
int | Inteiro de 32 bits: −2.147.483.648 a 2.147.483.647 |
long | Inteiro de 64 bits: −9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 |
float | Ponto flutuante de 32 bits; cerca de 7 algarismos significativos |
double | Ponto flutuante de 64 bits; cerca de 15–17 algarismos significativos |
char | Uma unidade de código UTF-16 de 16 bits: 0 a 65.535 |
boolean | true 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) oufloat(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
chararmazena uma unidade de código UTF-16, enquanto umbooleanarmazena 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ão | Resultado | Motivo |
|---|---|---|
"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
charsão somados numericamente, a menos que uma String já faça parte da operação.
3Faç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
| Ordem | Operadores ou agrupamento |
|---|---|
| Primeiro | Parênteses |
| Depois | Sinal 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ão | Resultado 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
doubleantes 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.
| Chamada | Resultado 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
| Chamada | Resultado |
|---|---|
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
doublemantém resultados fracionários, mas aproxima muitas frações decimais. Math.sqrt,Math.poweMath.PIpermitem cálculos geométricos sem importação.roundseleciona o inteiro mais próximo;flooreceilescolhem uma direção.Math.round(double)retornalong, enquantoflooreceilretornamdouble.- Ao reduzir a escala de um valor arredondado, use um divisor decimal para preservar sua fração.
4Converta 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ão | O que acontece | Resultado |
|---|---|---|
(double) sum / count | Converte 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.parseInteDouble.parseDoubleproduzem valores numéricos para operações aritméticas.Double.parseDoubleusa 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.parseBooleanaceita “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.
5Leia 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étodo | O 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.Scannerantes da classe e crie um Scanner dentro demain. 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
%npara uma quebra de linha e%%para um sinal de porcentagem literal. %.2farredonda 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.formatretorna texto, enquantoprintfo 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
1Construa e execute um pequeno programa de mensagens
13 passos
- 1Introduçã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, emainconté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.
- 2ExemploColoque 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. - 3DicaVerifique os nomes antes de acrescentar código
Salve a classe pública
NoticeemNotice.java. Use exatamente o mesmoNmaiúsculo. Preserve tambémSysteme o nome de métodomainem 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. - 4DesafioCorrija 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
Mainparamain. 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 nomeBulletin.javapara corresponder à sua classe pública. - 5ExplicaçãoCompile e execute o programa do aviso
Na pasta do código-fonte, digite:
javac Notice.java java Noticejavacverifica o código-fonte e produz o bytecodeNotice.class.javainicia 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. - 6DesafioLeia 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.
- 7ExemploAcompanhe 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
printnão acrescenta uma quebra de linha, a segunda chamada coloca3imediatamente 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. - 8ExemploEncerre 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 WelcomeNão há linha em branco entre as mensagens; um
println()vazio acrescentaria uma. - 9Ideia-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. - 10DesafioPreveja 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. - 11Conexã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.
- 12DesafioSepare 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
printda primeira mensagem paraprintln, 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. - 13RecapitulaçãoVerifique a estrutura, a execução e a saída
Use a estrutura da classe e de
mainpara 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:
printpermanece na linha,printlnavanç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.
2Acompanhe valores armazenados e construa uma mensagem
12 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoAcompanhe valores antes de prever a saída
- 2ExemploCrie dois valores armazenados independentes
- 3ExemploAtualize apenas o destino indicado
- 4DesafioPreserve um valor durante uma troca
- 5DicaUse final e var com cuidado
- 6ExplicaçãoEscolha um tipo adequado aos dados
- 7ExemploDeixe a escrita do literal determinar o tipo
- 8DesafioAmplie antes da multiplicação
- 9ExemploConstrua uma mensagem a partir do rastreamento
- 10DesafioDecida quando o sinal de adição significa soma
- 11DesafioCombine um valor copiado com uma nova saída
- 12RecapitulaçãoUse o valor mais recente e o tipo real
3Divida uma duração e calcule com frações
14 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoEscolha a operação adequada à pergunta
- 2ExplicaçãoAgrupe um cálculo completo
- 3DesafioCorrija uma expressão de média
- 4ExemploConte horas completas
- 5ExemploMantenha os segundos após essas horas
- 6ExemploExtraia minutos e segundos
- 7DesafioDivida outra duração
- 8Ideia-chaveO truncamento segue em direção a zero
- 9ExemploMantenha a fração de uma medida
- 10ExplicaçãoUse Math para uma raiz ou potência
- 11DesafioEscolha a regra de arredondamento
- 12DicaReduza a escala com um divisor decimal
- 13DesafioMantenha uma média antes de arredondá-la
- 14RecapitulaçãoAcompanhe o tipo e o agrupamento em cada operação
4Converta valores no ponto certo
11 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoPergunte qual valor chega à conversão
- 2ExplicaçãoAmplie um valor numérico automaticamente
- 3ExemploCompare duas posições de conversão explícita
- 4DesafioConverta e arredonde um valor negativo
- 5DicaNão trate uma conversão explícita como verificação de intervalo
- 6ExemploConverta o texto antes de somar
- 7ExplicaçãoEscolha o método de conversão adequado ao texto
- 8DesafioPreveja os resultados da conversão de texto
- 9ConexãoPrepare texto para exibição
- 10DesafioAcompanhe toda a sequência de conversões
- 11RecapitulaçãoEscolha uma conversão adequada à tarefa
5Leia, calcule, formate e teste
16 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoDesenvolva um programa em torno de seus dados
- 2ExplicaçãoConecte um Scanner à entrada pelo teclado
- 3ExemploLeia um rótulo como linha inteira
- 4ExemploConverta linhas numéricas de forma consistente
- 5DesafioCorrija um rótulo não lido
- 6DicaDefina explicitamente as convenções de entrada numérica
- 7ExemploCalcule com os tipos pretendidos
- 8ExplicaçãoFaça a cadeia de formatação corresponder aos valores
- 9ExemploExiba uma medida arredondada
- 10DesafioCorrija o especificador
- 11ExemploArmazene ou alinhe texto formatado
- 12ExplicaçãoEscolha testes antes de executar
- 13DesafioEncontre um defeito de cálculo com um teste
- 14DicaAcompanhe o primeiro valor inesperado
- 15DesafioAplique o plano a uma taxa
- 16RecapitulaçãoVerifique todo o caminho da entrada ao texto
Questões de Primeiros programas em Java
Conjunto 1: Escolha tipos e conecte entrada e saída10 Questões de Prática
Questão 1 de 10
Mostrar respostaOcultar resposta
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
4.0 para double average = 19 / 4;. Que tipo de erro explica a média imprecisa?Mostrar respostaOcultar resposta
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;
Mostrar respostaOcultar resposta
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
Mostrar respostaOcultar resposta
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
Mostrar respostaOcultar resposta
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
Math.floor(-4.2) retorna?Mostrar respostaOcultar resposta
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?Mostrar respostaOcultar resposta
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
Mostrar respostaOcultar resposta
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
System.out.printf("Mass: %.2f kg%n", 6.375); exibe antes da quebra de linha?Mostrar respostaOcultar resposta
.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
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?Mostrar respostaOcultar resposta
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
System.out.println("Seats: " + 6 + 2); exibe?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
int result = 18 - 6 / 3 * 2;?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
-11 / 4?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
int total = 19; int groups = 4;, qual expressão produz um quociente fracionário?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
public class TrailLog. Qual deve ser o nome de seu arquivo-fonte?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?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");
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;
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
4.25 um literal float em Java?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);
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
int seconds = 7_489;. Qual par de expressões fornece as horas completas e os minutos inteiros restantes dentro da hora atual?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Path: C:\Work com exatamente uma barra invertida?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
System.out.println(3 + 4 + " / " + 3 * 4); exibe?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);
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
double value = Math.round(8.276 * 100) / 100;?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
(int) -6.8?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
Integer.parseInt(" 58") é avaliado?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();
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
System.out.printf("[%4d][%-5s]", 7, "Oak");?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
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
System.out.println("Ready")?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
var count = 6; quando o mesmo método executa count = 6.5;?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
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?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);
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Math.sqrt(5 * 5 + 12 * 12) retorna?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);
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
Boolean.parseBoolean("Yes") retorna?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
minutes = totalSeconds / 60; seconds = totalSeconds;. Qual correção ajusta o cálculo?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
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?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);
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
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);
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
'E' o resultado da adição de 2 ao código de caractere de 'C'?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);
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
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();
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);
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
scanner está pronto, e Locale está importado.Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Travou em uma questão sua? Ajuda com Tarefas
Termos-Chave
A
Análise e conversão de texto (parsing)
Aproximação em ponto flutuante
1.1 * 3 revela a aproximação em ponto flutuante no resultado exibido.Arredondamento
Atribuição
count = count + 2;, count contém dois a mais que o valor que tinha antes dessa instrução.Atribuição composta
total += 5; aumenta um total int em 5 e armazena o valor atualizado em total.B
Bloco
Bytecode
.class e executada por uma Máquina Virtual Java adequada.java pode executar por meio da JVM.C
Cadeia de caracteres (String)
"".Cadeia de caracteres vazia
"" + 'A' + 'B' faz as adições construírem texto e produz a String “AB”.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
Classe
public class Greeting abre a classe que contém o método main do programa.Classe Math
Math.sqrt(81) encontra uma raiz quadrada sem exigir uma importação ou definição de método.Classe Scanner
System.in pode ler o nome de um usuário e as medidas necessárias para um programa.Código-fonte
.java antes de o compilador traduzi-lo para execução.Comentário
// ou entre /* e */.// Convert to minutes explica por que um cálculo de tempo multiplica um valor em horas por 60.Compilador
javac Notice.java invoca o compilador, que informa um erro se um ponto e vírgula estiver faltando.Concatenação
"Count: " + 8 constrói uma mensagem contendo um rótulo, um espaço e um algarismo.Configuração regional (locale)
Locale.US torna a entrada decimal com ponto consistente em diferentes computadores.Constante
final pode receber um valor uma vez e não pode receber uma nova atribuição depois.MINUTES_PER_HOUR dá ao número 60 um nome útil em cálculos de conversão de tempo.Conversão de ampliação
Conversão de estreitamento
Conversão explícita de tipo (cast)
(double) total / count, a conversão explícita altera o tipo de um operando antes de a divisão ser realizada.D
Declaração
int count; apresenta um nome, mas count ainda precisa de um valor antes de ser lido.Decremento
-- de Java realiza essa atualização sem uma atribuição de subtração separada.secondsLeft--; reduz o número armazenado de segundos restantes em exatamente uma unidade.Dividendo
/ ou % em uma expressão Java de divisão com dois operandos.-11 % 4, o dividendo negativo explica por que o resto diferente de zero também é negativo.Divisão inteira
23 / 5 produz 4 grupos completos, deixando a fração fora do quociente.E
Erro de compilação
Erro de execução
Erro de lógica
Especificador de formato
%d para um inteiro ou %n para uma quebra de linha.%f consome um valor em ponto flutuante, enquanto %n acrescenta um separador de linha sem consumir um valor.Estouro de inteiro (integer overflow)
Exceção InputMismatchException
nextInt() causa InputMismatchException porque é necessário um inteiro.Exceção NumberFormatException
Integer.parseInt causa NumberFormatException durante a execução.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)
Função teto (ceiling)
I
Incremento
++ de Java realiza essa atualização em uma única instrução.count++; altera uma contagem armazenada de 8 para 9 antes de a instrução seguinte ser executada.Inicialização
double speed = 72.5; declara speed e a inicializa com uma medida em km/h.Instrução
System.out.println("Ready"); é uma instrução que exibe uma mensagem e uma quebra de linha.K
Kit de Desenvolvimento Java (JDK)
javac e java.L
Largura do campo
%4d produz três espaços iniciais antes do algarismo para preencher o campo de quatro caracteres.Literal
8, 8L e 8.0 expressam quantidades semelhantes, mas têm os tipos int, long e double.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)
Método Double.parseDouble
Método Integer.parseInt
Integer.parseInt("72") retorna 72, mas acrescentar um espaço inicial torna esse texto inteiro inválido.Método main
main faz suas mensagens aparecerem na ordem em que foram escritas.Método nextLine
nextLine() pode retornar uma String vazia imediatamente.Método print
print("Name: ") permite que um usuário digite uma resposta diretamente ao lado da solicitação na tela.Método printf
printf("%d items%n", 8) exibe a contagem, a palavra “items” e um separador de linha final.Método println
println exibem duas linhas separadas mesmo quando seus literais não contêm quebras de linha.Método String.format
String.format(Locale.US, "%.1f km", 8.25) e exibir esse texto depois.N
Não é um número (NaN)
0.0 / 0 produz NaN em vez de lançar uma exceção de divisão inteira.Notação científica
E nos valores exibidos por Java.1.0E-4 representa 0,0001, então o expoente negativo descreve uma magnitude pequena.O
Operando
"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
Precedência de operadores
4 + 3 * 2, então o produto é formado primeiro.Precisão
Precisão de formatação
%f, ela define o número de algarismos após o separador decimal.%.2f transforma um valor exibido de 4,5 em “4,50” sem alterar a variável numérica.R
Resto
% de Java fornece um resultado diferente de zero com o sinal do dividendo.23 % 5 fornece as 3 peças fora dos grupos completos.S
Saída esperada
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
Tipo boolean
boolean isMember = true; armazena um valor lógico sem usar aspas ou um número.Tipo char
'7' tem código 55, então armazená-lo como char não o torna o valor inteiro 7.Tipo double
Tipo float
f em 2.75f marca um literal float, enquanto 2.75 sem sufixo é um literal double.Tipo int
int, mas uma contagem acima de seu máximo precisa de um tipo inteiro maior.Tipo long
5_000_000_000L cria um literal que pode inicializar uma grande contagem inteira.Tipo primitivo
int usa um tipo primitivo, enquanto um nome armazenado como String usa um tipo de classe.Truncamento
U
Unidade de entrada (token)
nextInt() podem ler.V
Valor intermediário
Variável
distanceKm armazena uma medida que um cálculo posterior de tempo divide pela velocidade.- 1Primeiros programas em Java
- 2Condições e laços em Java
- 3Métodos em Java
- 4Listas e vetores em Java
- 5Classes e objetos em Java
- 6Objetos e referências em Java
- 7HashMaps e coleções em Java
- 8Herança, interfaces e polimorfismo em Java
- 9Exceções em Java
- 10Pacotes e testes unitários em Java
- 11Genéricos e expressões lambda em Java
Sobre esta aula
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.