Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Lista de exercícios 2 1. Dada a classe public class Material{ private int codigo; //todo material tem um código único para identificá-lo private String nome; // descreve o material private int saldo; // quantidade em estoque /** Muda o nome do material */ /** Muda o código do material */ /** Mostra na tela os valores dos campos de um material */ /** Abastece o estoque com certa quantidade do material */ /** Retira do estoque certa quantidade do material, abatendo-a do saldo */ a) Escreva os três primeiros métodos da classe Material, conforme indicados pelos comentários. b) Escreva um conjunto de instruções Java que façam o seguinte: - instanciar dois objetos do tipo Material; - para cada um dos objetos, chamar cada um dos métodos escritos no ex. anterior. 2. Dado o método public void setendereco(string novoendereco){... indique quais chamadas abaixo são corretas, considerando um objeto de nome p. Para as incorretas informe o motivo. a) p.setendereco(); b) p.setendereco(double v); c) p.setendereco("av. Unisinos, 950"); d) String novoend = "Av. Unisinos, 950"; p.setendereco(novoend); e) System.out.println(p.setEndereco("Av. Unisinos, 950")); 3. Para a classe Circulo abaixo, escreva os métodos indicados pelos dois primeiros comentários. public class Circulo{ private double raio; /** Altera o valor do raio */ /** Exibe o valor do raio */ /** Calcula o valor da área do círculo */ /** Calcula o valor do perímetro do círculo */ 4. Escreva um outro método para a classe Material, que mostre os valores dos atributos na tela no seguinte formato: Código Nome Saldo xxxxxx xxxxxxxxxxxxxxxxxxxxxxx xxxxx 5. O que será exibido na tela pelo seguinte trecho de um método? String s = "blablu"; System.out.print(s + "glu"); System.out.println( s + " " + s); Programação I - Prof. Aníbal - Lista de exercícios 2 1
6. Dada a classe: public class Quadrado{ private int lado; public void setlado(int medidadolado){ lado = medidadolado; public void exibedados(){ System.out.println( Lado: + lado); O que será mostrado na tela pelo trecho abaixo? (Se você não desenhar o que acontece na memória, terá dificuldade de acertar) Quadrado q1 = new Quadrado(); Quadrado q2 = q1; q1.exibedados(); q2.setlado(6); q1.exibedados(); q1.setlado(10); q2.exibedados(); 7. Crie um construtor para a classe Circulo. 8. Crie um construtor para a classe Material, com três parâmetros. 9. Dado o construtor public Produto(String umnome, double umpreco){... quais das chamadas abaixo é inválida e por quê? a) Produto p = new Produto("Laranja", 3.50); b) Produto laranja = new Produto("Banana", 2.35); c) Produto banana = new Produto(3.50); d) new Produto("Laranja", 3.50); e) Produto p; p = new Produto(3.50, "Laranja"); f) Produto p; p = new Produto("Laranja", 3.50); g) Produto p; p.produto("laranja", 3.50); h) Qual o nome da classe? 10. Escreva um segundo construtor (sobrecarga) para a classe Material, com apenas dois parâmetros: um para inicializar o código e outro para o nome. O saldo inicial deverá ser 0. A seguir, escreva todas as formas que a classe tem de instanciar um objeto do tipo Material. 11. A classe Produto tem os seguintes construtores: public Produto(String umnome, double umpreco) {... // construtor 1 public Produto(String umnome) {... // construtor 2 public Produto( ) {... // construtor 3 Qual dos construtores será chamado para cada situação abaixo? a) Produto p = new Produto( ); b) Produto p = new Produto("Banana", 2.45); c) Produto p; p = new Produto ("Laranja"); d) Produto p = new Produto(5.50); Faça um diagrama representando na memória os vários objetos criados acima. Programação I - Prof. Aníbal - Lista de exercícios 2 2
12. Sobrecarregue o método exibedados da classe Funcionario (vista em aula), que tenha um parâmetro do tipo String, de nome moldura. Quando chamado, será passado um String, como este "******************************" ou este "-------------...", que deverá ser impresso antes e depois dos dados. Por exemplo, se a chamada for Funcionario f1 = new Funcionario("Mario Quintana", 4000.0, 0) f1.exibedados ("++++++++++++++++++++++++++++++"); sairá na tela: ++++++++++++++++++++++++++++++ Nome: Mario Quintana Salario: 4000.0 Dependentes: 0 ++++++++++++++++++++++++++++++ 13. Crie uma classe de nome TestaCirculo, que instancie um círculo do tipo dado na classe Circulo, faça algumas alterações de raio neste objeto e exiba após cada mudança o raio para verificar se as mudanças foram feitas corretamente. 14. Dadas as duas classes abaixo public class C{ private int i; private String s; private double d; public C(double dd, int ii, String ss){ i = ii; d = dd; s = ss; public void m( ){ System.out.print("i = " + i); System.out.print(" d = " + d); System.out.println(" s = " + s); public class TestaC{ public static void main (String args[]){ C obj1 = new C(56.0, 2, "blabli"); obj1.m( ); C obj2 = new C(0.5, 10, "glugli"); obj2.m( ); a) ao executar a classe TestaC o que acontece na memória (faça um diagrama disso)? b) o que é exibido na tela? c) rescreva o método m com uma só instrução System.out de modo a resultar no mesmo efeito. d) dentro do método main, seria válido o comando seguinte? new C(1.5, 5, "blubla").m(); Se inválido, por quê? se válido, qual o efeito? 15. Escreva a classe de teste TestaMaterial, instancie alguns objetos do tipo Material e chame alguns métodos. Programação I - Prof. Aníbal - Lista de exercícios 2 3
16. Dada a classe abaixo public class TestaCirculo{ public static void main(string args[]){ Circulo c1; c1 = new Circulo(3); Circulo c2 = c1; c1.exiberaio(); c2.exiberaio(); Circulo c3 = new Circulo(8.5); c3.exiberaio(); c2 = c3; c2.exiberaio(); c3 = new Circulo(5); c3.exiberaio(); c2 = new Circulo(4.2); c2.exiberaio(); a) Indique o que ocorre na memória (desenhando os vários objetos criados) e o que é exibido na tela, pela execução do trecho dado. b) Qual o erro lógico ocasionado pela penúltima instrução (c2 = new Circulo(4.2);) e como ele poderia ser evitado? 17. Dado o trecho Funcionario a = new Funcionario("Miguel Angelo", 5430.00, 1); Funcionario b = new Funcionario("Rafael", 3000,00, 5); escreva as atribuições necessárias para permutar os objetos de a e b, sem instanciar novos objetos. 18. Repita o exercício anterior para quatro objetos a, b, c e d, fazendo o seguinte rodízio: a b c d a 19. Quais dos métodos abaixo têm mesma assinatura? a) public void m1(string s, double d) {... b) public int m1(string n, double x) {... c) public void m1(double d, String s) {... d) public void m1(double d) {... e) public void m1(double x) {... 20. Escreva um método de acesso (get) para cada um dos atributos da classe Material. Escreva uma linha de código que exiba os atributos de um material, chamando os métodos que você acabou de escrever. 21. Crie um método de acesso (get) para a classe Circulo que devolva o valor atual do raio. Escreva instrução adicional na classe TestaCirculo que exiba esse valor para um dos objetos criados, chamando o método que V. acabou de codificar. 22. O que será impresso, se o usuário digitar blu e depois digitar blo? Teclado t = new Teclado(); System.out.println("Bla" + t.lestring( ) + "bli"); System.out.println("Bla" + t.lestring("digite um texto: " ) + "bli"); 23. O que acontecerá se o usuário digitar 123.5? int i = t.leint("entre com um valor inteiro: "); 24. Descreva o que acontecerá com a execução das instruções seguintes, se colocadas no método main da classe TestaMaterial (indique o que ocorrerá na memória, no teclado, na tela): Programação I - Prof. Aníbal - Lista de exercícios 2 4
Teclado t = new Teclado(); Material mat = new Material(t.leInt("Codigo: "), t.lestring("nome: "), t.leint("saldo inicial: ")); mat.exibedados( ); Algumas respostas 1. public void setnome(string novonome){ nome = novonome; public void setcodigo(int novocodigo){ codigo = novocodigo; public void exibedados(){ System.out.println( Código: + codigo); System.out.println( Nome: + nome); System.out.println( Saldo em estoque: + saldo); 2. Corretos os itens c e d. Item (a) falta um argumento; item b tem um erro de codificação no argumento e não poderia ser double; no item (e), um método void não é aceito porque não retorna nenhum valor para ser impresso. 4. public void exibedados2(){ System.out.println( Código Nome Saldo ); System.out.println(código + + nome + + saldo); 5. blabluglublablu blablu. 6. Lado: 0 Lado: 6 Lado: 10 7. public Circulo(double r){ raio = r; 8. public Material(int cod, String n, int saldoinicial){ codigo = cod; nome = n; saldo = saldoinicial; 9. (c) chamada tem um só argumento para construtor de dois parâmetros; (d) embora esta chamada seja válida, ela parece inútil, pois o objeto criado não é atribuído a nenhuma variável e, portanto, não poderá ser usado pelo programa; (e) os argumentos estão invertidos; (g) construtor só pode ser chamado com new; (h) Produto. 10. public Material(int cod, String n){ codigo = cod; nome = n; Programação I - Prof. Aníbal - Lista de exercícios 2 5
saldo = 0; Instanciando dois objetos do tipo Material, usando cada um dos construtores: Material m = new Material(123, caneta, 30); Material m1 = new Material (345, lápis ); 11. (a) 3; (b) 1; (c) 2; (d) erro não existe nenhum construtor com essa assinatura. 12. public void exibedados(string moldura){ System.out.println(moldura); System.out.println("Nome: " + nome); System.out.println("Salário: " + salario); System.out.println("Dependentes: " + numerodedependentes); System.out.println(moldura); 14. a) obj1 i s C i 2 blabli obj2 s C i 10 glugli d 56.0 d 0.5 b) i = 2 d = 56.0 s = blabli i = 10 d = 0.5 s = glugli c) public void m(){ System.out.println("i = " + i + \n d = " + d + \n s = + s); d) Válido. Um novo objeto do tipo C é instanciado e este objeto chama o método m(), que exibe na tela i = 5 d = 1.5 s = blubla Todavia, o objeto criado na memória não poderia ser acessado de novo, pois não tem nenhuma variável objeto referenciando-o. 16. b) O objeto círculo de raio 8.5 não é mais acessível por nenhuma variável objeto. Ele não pode mais ser acessado. Para evitar tal erro, deveríamos declarar outra variável para referenciá-lo, antes da instrução referida (Circulo c4 = c2;). 17. Funcionario salva = a; a = b; b = salva; 18.Funcionario salva = a; a = b; b = c; c = d; d = salva; 19. (a) e (b) têm mesma assinatura; (d) e (e) têm mesma assinatura. 22. Blablubli Blablobli 23. Erro em tempo de execução (uma exception), mais especificamente, NumberFormatException provocada pela digitação de um valor de ponto flutuante quando era esperado um inteiro. Programação I - Prof. Aníbal - Lista de exercícios 2 6