Métodos, quem chama quem?

8 respostas
F

Estou com dúvida em todo esse código. Já aqui no primeiro bloco, return x faz chamada pra quem?
E o return r?

import java.util.*;
class Matrizes{
	public static int lerDimensaoMatriz(String y){
		Scanner	s = new Scanner(System.in);
		int x;
		System.out.print ("digite "+y+ ": ");
		x = s.nextInt();
		return x;
	}
	
	
	
	
	
	public static void lerMatriz(double a [][]){
		Scanner	s = new Scanner(System.in);
		for (int i = 0; i < a.length; i++){
			for (int j = 0; j < a[i].length; j++){
		System.out.print ("[" + i + "," + j + "] = ");
		a [i][j] = s.nextDouble();
			}
		}
	}
	
	
	
	
	public static char lerOpcao(){
		Scanner	s = new Scanner(System.in);
		char r;
		System.out.println();
	System.out.print ("opcoes: a, b, c, d, e, f, g, h - qq outra letra encerra ");
		r = s.nextLine().toLowerCase().charAt(0);
		return r;
	}
	
	
	
	
	public static void matrizLida(double a[][],String c){
		System.out.println (c);
		for (int i = 0; i < a.length; i++){
			for (int j = 0; j < a.length; j++){
			   System.out.print (a[i][j] + "  ");
			}
			System.out.println();
		}
		System.out.println();
	}
	
	
	
	public static void main(String args []){
		double a[][]; 
		char opcao=' ';
		String opcoes = "abcdefgh";
		int m = lerDimensaoMatriz("numero de linhas/colunas da matriz quadrada");
		a = new double [m][m];
		lerMatriz(a);
		do{
			opcao = lerOpcao();
			if (opcoes.indexOf(opcao)>=0){
				System.out.println();
				matrizLida(a, "Matriz lida p/ opção escolhida");
				switch (opcao){
					case 'a' : ;//diagonalPrincipal(a, "DIAGONAL PRINCIPAL");
							break;
					case 'b' : ;//trianguloSuperiorDiagonalPrincipal(a,"Triângulo R à diagonal principal"); 
				            break;
					case 'c' : ;// trianguloInferiorDiagonalPrincipal(a, "triângulo inferior à diagonal principal");
				           	break;			  
					case 'd' : ;// excetoDiagonalPrincipal(a,"Toda a matriz, exceto a principal" );
							break;
					case 'e' : ;// diagonalSecundaria(a, "Diagonal secundária");
				            break;			  			  			  
					case 'f' : ;//  trianguloSuperiorDiagonalSecundaria(a, "TRIANGULO SUPERIOR A DIAGONAL SECUNDARIA");
							break;
					case 'g' : ;// trianguloInferiorDiagonalSecundaria(a, "TRIANGULO INFERIOR A DIAGONAL SECUNDARIA");
							break;
					case 'h' : ;// excetoDiagonalSecundaria(a, "TODA A MATRIZ EXCETO A DIAGONAL SECUNDARIA");
				}	
			}	
		}while (opcoes.indexOf(opcao)>=0); 
	} 
}

8 Respostas

J

return x vai enviar o valor introduzido pela utilizador para o número de linhas ou colunas.
return r vai enviar a opção introduzida pelo utilizador na posição 0 (zero) do char, convertendo o caracter maiusculo para minusculo, caso seja necessário.

peczenyj

Começe pelo principal (ou seja, o main)

int m = lerDimensaoMatriz("numero de linhas/colunas da matriz quadrada");

return x não está chamando absolutamente nada: o método lerDimensaoMatriz foi chamado pelo método main e, então, entregou o valor de ‘x’ para a variavel ‘m’ na chamada acima.

F

Certo, começando do início.

double a[][]; // informa que se trata de uma matriz

char opcao=’ '; //opção é caractere e é iniciada com vazio(?)

String opcoes = “abcdefgh”; // por que todas as opções do switch têm que ser atribuídas à variável opções?

Então depois de ser escolhido a, b, c, d, e, f, g ou h, continua em qual módulo?

LPJava

vai retornar para o tipo de seu metodo!

int = return x
char = return r

flw!

J

Depois de ser escolhida a opção, é suposto o programa seguir pela opção seleccionada (dentro do switch), mas não está nada definido dentro das opções. Estão apenas escritos comentários.

Marcio_Nogueira

Em relação à sobrecarga, há algumas regras a se observar:
O modificador de acesso pode ser diferente.
O número, assim como o tipo de parâmetros também pode ser diferente.
O tipo de retorno também pode ser diferente.
Lembre-se que a sobre carga leva em conta a assinatura do método que está sendo passaa para saber que método chamar.

F

Não entendi o que vcs quiseram dizer com "chama o método return x, return r".

Programa completo:

import java.util.*;   
class Matrizes{   
    public static int lerDimensaoMatriz(String y){   
        Scanner s = new Scanner(System.in);   
        int x;   
        System.out.print ("digite "+y+ ": ");   
        x = s.nextInt();   
        return x;   
    }   
       
       
       
       
       
    public static void lerMatriz(double a [][]){   
        Scanner s = new Scanner(System.in);   
        for (int i = 0; i < a.length; i++){   
            for (int j = 0; j < a[i].length; j++){   
        System.out.print ("[" + i + "," + j + "] = ");   
        a [i][j] = s.nextDouble();   
            }   
        }   
    }   
       
       
       
       
    public static char lerOpcao(){   
        Scanner s = new Scanner(System.in);   
        char r;   
        System.out.println();   
    System.out.print ("opcoes: a, b, c, d, e, f, g, h - qq outra letra encerra ");   
        r = s.nextLine().toLowerCase().charAt(0);   
        return r;   
    }   
       
       
       
       
    public static void matrizLida(double a[][],String c){   
        System.out.println (c);   
        for (int i = 0; i < a.length; i++){   
            for (int j = 0; j < a.length; j++){   
               System.out.print (a[i][j] + "  ");   
            }   
            System.out.println();   
        }   
        System.out.println();   
    }   
       
       
       
    public static void main(String args []){   
        double a[][];   
        char opcao=' ';   
        String opcoes = "abcdefgh";   
        int m = lerDimensaoMatriz("numero de linhas/colunas da matriz quadrada");   
        a = new double [m][m];   
        lerMatriz(a);   
        do{   
            opcao = lerOpcao();   
            if (opcoes.indexOf(opcao)>=0){   
                System.out.println();   
                matrizLida(a, "Matriz lida p/ opção escolhida");   
                switch (opcao){   
                    case 'a' : diagonalPrincipal(a, "DIAGONAL PRINCIPAL");   
                            break;   
                    case 'b' : trianguloSuperiorDiagonalPrincipal(a,"Triângulo R à diagonal principal");   
                            break;   
                    case 'c' :  trianguloInferiorDiagonalPrincipal(a, "triângulo inferior à diagonal principal");   
                            break;               
                    case 'd' :  excetoDiagonalPrincipal(a,"Toda a matriz, exceto a principal" );   
                            break;   
                    case 'e' :  diagonalSecundaria(a, "Diagonal secundária");   
                            break;                                       
                    case 'f' :   trianguloSuperiorDiagonalSecundaria(a, "TRIANGULO SUPERIOR A DIAGONAL SECUNDARIA");   
                            break;   
                    case 'g' : trianguloInferiorDiagonalSecundaria(a, "TRIANGULO INFERIOR A DIAGONAL SECUNDARIA");   
                            break;   
                    case 'h' : excetoDiagonalSecundaria(a, "TODA A MATRIZ EXCETO A DIAGONAL SECUNDARIA");   
                }     
            }     
        }while (opcoes.indexOf(opcao)>=0);   
    }   
}

Ele começa aqui:

public static void main(String args []){   
        double a[][];   
        char opcao=' ';   
        String opcoes = "abcdefgh";   
        int m = lerDimensaoMatriz("numero de linhas/colunas da matriz quadrada");   
        a = new double [m][m];   
        lerMatriz(a);

1) Poderiam por favor me dizer por que abcdefgh está na atribuição a "String opcoes"?

2) int m= lerDimensaoMatriz chama o método:

class Matrizes{   
    public static int lerDimensaoMatriz(String y){   
        Scanner s = new Scanner(System.in);   
        int x;   
        System.out.print ("digite "+y+ ": ");   
        x = s.nextInt();   
        return x;   
    }

e esse método finaliza com return x. Isso significa que vai retornar o x pro main?

3) continuando no programa principal, é criado uma matriz, double m X m.
Logo abaixo tem "lerMatriz(a);".
Chama o método

public static void lerMatriz(double a [][]){   
        Scanner s = new Scanner(System.in);   
        for (int i = 0; i < a.length; i++){   
            for (int j = 0; j < a[i].length; j++){   
        System.out.print ("[" + i + "," + j + "] = ");   
        a [i][j] = s.nextDouble();   
            }   
        }   
    }

E continua onde? Ele é void, não retorna nada. Como vai entrar no switch do main?

F

Isso é tão fácil ou ninguém sabe? :shock: :roll:

Criado 26 de outubro de 2007
Ultima resposta 1 de nov. de 2007
Respostas 8
Participantes 5