Já vimos que Java
tem tipos diferentes de variáveis e objetos.
Por exemplo, se fizermos a conta 2+3
teremos resultado 5
. Mas se fizermos a conta "2"+"3"
teremos resultado "23"
.
Por que isso acontece? Porque 2
é o valor do tipo int
(número inteiro) 2
, que se somado com 3
teremos 5
.
Mas "2"
é uma variável do tipo String
que se somarmos com "3"
ele irá concatenar as duas palavras resultado na palavra "23"
. Assim como "Hello" + "World"
resultará em "HelloWorld"
.
Então para fazermos operações matemáticas com a entrada do usuário, que sempre será uma String
, precisamos aprender a transformar uma String
em um int
. O nome desta transformação é parse.
Vamos fazer um programa que recebe dois números e exibe a soma, subtração, multiplicação e a divisão.
xml
Para a parte do xml
copie o código abaixo.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:gravity="center"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<EditText
android:id="@+id/numero1"
android:layout_width="180dp"
android:layout_height="64dp"
android:hint="Numero 1"
android:textSize="32dp"
android:inputType="number"
/>
<EditText
android:id="@+id/numero2"
android:layout_width="180dp"
android:layout_height="64dp"
android:hint="Numero 2"
android:textSize="32dp"
android:inputType="number"
/>
</LinearLayout>
<Button
android:id="@+id/botao"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Operação"
android:textSize="32dp"
/>
<TableLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+: "
android:textSize="32dp"
android:fontFamily="monospace"
/>
<TextView
android:id="@+id/saidaSoma"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Soma"
android:textSize="32dp"
android:fontFamily="monospace"
/>
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-: "
android:textSize="32dp"
android:fontFamily="monospace"
/>
<TextView
android:id="@+id/saidaSub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Subtração"
android:textSize="32dp"
android:fontFamily="monospace"
/>
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="*: "
android:textSize="32dp"
android:fontFamily="monospace"
/>
<TextView
android:id="@+id/saidaMulti"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Multiplicação"
android:textSize="32dp"
android:fontFamily="monospace"
/>
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="/: "
android:textSize="32dp"
android:fontFamily="monospace"
/>
<TextView
android:id="@+id/saidaDiv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Divisão"
android:textSize="32dp"
android:fontFamily="monospace"
/>
</TableRow>
</TableLayout>
</LinearLayout>
Temos novidades neste código xml
:
Nos elementos EditText
que recebem números, colocamos o parâmetro android:inputType="number"
, que usa um teclado numérico quando o usuário for colocar a entrada. Outros tipos de entrada podems ser visto aqui
Para organizar a saída, e deixar tudo alinhado, usamos o layout TableLayout
, e em cada linha deste layout usamos TableRow
Para ficar ainda mais alinhado, incluímos o parâmetro android:fontFamily="monospace"
nos textos de saída para deixar os números da saída com a fonte monospace. Esta fonte deixa todos os characteres com a mesma largura, e ajuda o texto da linha de uma tabela a ficar alinhado com as outras linhas.
java
Quase tudo no código java
já vimos em aulas anteriores:
package com.viniciusdenovaes.meuapptesteunip;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
/*
* Aqui teremos a definicao das variaveis
* */
EditText inNum1;
EditText inNum2;
Button botao;
TextView outSom;
TextView outSub;
TextView outMul;
TextView outDiv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
/*
* Aqui teremos os valores de cada variavel
* */
inNum1 = findViewById(R.id.numero1);
inNum2 = findViewById(R.id.numero2);
botao = findViewById(R.id.botao);
outSom = findViewById(R.id.saidaSoma);
outSub = findViewById(R.id.saidaSub);
outMul = findViewById(R.id.saidaMulti);
outDiv = findViewById(R.id.saidaDiv);
/*
* Aqui teremos as funcionalidades
* */
botao.setOnClickListener(view -> {
String textoN1 = inNum1.getText().toString();
String textoN2 = inNum2.getText().toString();
// transformamos o text em um numero inteiro
Integer numero1 = Integer.parseInt(textoN1);
Integer numero2 = Integer.parseInt(textoN2);
// fazemos as operacoes com numeros
Integer resSom = numero1 + numero2;
Integer resSub = numero1 - numero2;
Integer resMul = numero1 * numero2;
Integer resDiv = numero1 / numero2;
// fazemos a operacao de volta para transformar o numero em string
String texSom = resSom.toString();
String texSub = resSub.toString();
String texMul = resMul.toString();
String texDiv = resDiv.toString();
outSom.setText(texSom);
outSub.setText(texSub);
outMul.setText(texMul);
outDiv.setText(texDiv);
});
}
}
java
Temos novidades neste código java
:
String
em Integer
Usamos o comando Integer numero1 = Integer.parseInt(textoN1);
para transformar o texto da entrada em um número.
Integer
em String
Usamos o comando String texSom = resSom.toString();
para transformar o resultado da operação em um texto.
Integer
ao invés de int
Podemos usar int
ou Integer
para usar números inteiros. Aqui usamos Integer
para usar o método toString()
que ele fornece. Este método transforma um número em String
.
Abaixo podemos ver o resultado em operar dois números inteiros
Você percebeu que a divisão de 9
por 2
deu resultado 4
? Isto acontece por que quando operamos um número inteiro por outro inteiro o resultado deve ser um inteiro! Isto faz com que a parte decimal do resultado 9/2=4.5
foi jogada fora.
Para consertar isto precisamos usar um número real no lugar de um número inteiro.
Faremos isso no próximo tutorial...