Boa tarde amigos! Antes quero desejar FELIZ PÁSCOA a todos ai! Bom, sou novo no GUJ então por favor me desculpem se estou procedendo de forma incorreta e me ajudem a não cometer mais erros ok?
Bom, estou com algumas dúvidas sobre a linguagem java. Iniciei este ano os estudos sobre a linguagem e de cara já peguei exercícios sobre matrizes. Até ai tudo bem, pois já trabalhei com matrizes, porém na linguagem C. O problema é que desta vez trata-se de matrizes de frações e acabei travado na multiplicação de duas matrizes. Vou explicar o que ja fiz de código, quem sabe vocês possam me dar uma idéia de onde está o erro!
Criei uma classe Fracao com os atributos privados: numerador, denominador e mdc, com um construtor que recebe como parâmetros numerador e denominador. Esta classe Fracao possui os métodos para as operações de somar, subtrair, multiplicar, dividir e simplificar fracoes e um método toString para imprimir frações. Até ai tudo bem, já testei o código e está funcionando bem! Bom, continuando… criei uma outra classe denominada Matriz com os atributos privados: int linhas, int colunas e Fracao m[][], com um construtor que recebe como parâmetros linhas, colunas e Fracao m[linhas][colunas]. Esta classe possui os metodos para operações de somar, mutiplicar, subtrair e transposta de matriz. Por último criei uma outra classe e a chamei de main para iniciar o programa, nesta classe estão as chamadas dos métodos. O problema se encontra na chamada do método da classe Matriz. Vou postar o código que já fiz:
CÓDIGO DA CLASSE FRAÇÃO: onde são realizadas operações com frações.
[code]
import java.util.Scanner;
public class Fracao {
private int numerador;
private int denominador;
private int mdc;
public Fracao(int n, int d){
numerador = n;
denominador = checarDenominador(d);
}
private int checarDenominador(int d){
do{
if(d > 0){
return d;
}
else{
System.out.printf("O valor %d nao e um valor valido!\n", d);
System.out.println("INFORME UM NOVO VALOR \"POSITIVO\" PARA O DENOMINADOR: ");
Scanner input = new Scanner(System.in);
d = input.nextInt();
}
}while(d == 0);
return d;
}
private int minimo(int n, int d){
int mdc = n % d;
while(mdc != 0){
n = d;
d = mdc;
mdc = n % d;
}
return d;
}
public void simplificar(){
mdc = minimo(numerador, denominador);
numerador = this.numerador / mdc;
denominador = this.denominador / mdc;
if(numerador % denominador == 0){
numerador = numerador/denominador;
}
}
public Fracao somar(Fracao f){
if(this.denominador == f.denominador){
Fracao r = new Fracao(1, 1);
r.numerador = this.numerador + f.numerador;
r.denominador = this.denominador;
r.simplificar();
return r;
}
else{
Fracao r = new Fracao(1, 1);
r.denominador = f.denominador * this.denominador;
r.numerador = (r.denominador/this.denominador)*this.numerador + (r.denominador/f.denominador)*f.numerador;
r.simplificar();
return r;
}
}
public Fracao subtrair(Fracao f){
if(this.denominador == f.denominador){
Fracao r = new Fracao(1, 1);
r.numerador = this.numerador - f.numerador;
r.denominador = this.denominador;
r.simplificar();
if(r.denominador < 0){
r.numerador = r.numerador*(-1);
r.denominador = r.denominador*(-1);
}
return r;
}
else{
Fracao r = new Fracao(1, 1);
r.denominador = this.denominador * f.denominador;
r.numerador = ((r.denominador/this.denominador)*this.numerador) - ((r.denominador/f.denominador)*f.numerador);
r.simplificar();
if(r.denominador < 0){
r.numerador = r.numerador*(-1);
r.denominador = r.denominador*(-1);
}
return r;
}
}
public Fracao multiplicar(Fracao f){
Fracao r = new Fracao(1, 1);
r.numerador = this.numerador * f.numerador;
r.denominador = this.denominador * f.denominador;
r.simplificar();
if(mdc < 0){
mdc = mdc*(-1);
}
r.numerador = r.numerador/mdc;
r.denominador = r.denominador/mdc;
return r;
}
public Fracao dividir(Fracao f){
Fracao r = new Fracao(1, 1);
r.numerador = this.numerador * f.denominador;
r.denominador = this.denominador * f.numerador;
r.simplificar();
if(mdc < 0){
mdc = mdc*(-1);
}
r.numerador = r.numerador/mdc;
r.denominador = r.denominador/mdc;
return r;
}
public String toString(){
return String.format("%d/%d\t", numerador, denominador);
}
}[/code]
CÓDIGO DA CLASSE MATRIZ: onde são realizadas os preenchimentos, operações e exibições das matrizes.
[code]
import java.util.Scanner;
public class Matriz{
private int linhas;
private int colunas;
private Fracao m[][];
public Matriz(int l, int c){
linhas = lerDimensao(l);
colunas = lerDimensao(c);
m = new Fracao[linhas][colunas];
}
public int lerDimensao(int dimensao){
do{
if(dimensao < 1){
System.out.println("VALOR INVÁLIDO! O valor deve ser maior que zero!\n");
System.out.println("Informe outro valor para dimensão: ");
Scanner input = new Scanner(System.in);
dimensao = input.nextInt();
}
}while(dimensao < 1);
return dimensao;
}
public void lerMatriz(){
int i, j;
for(i = 0; i < linhas; ++i){
for(j = 0; j < colunas; ++j){
System.out.printf("Elemento [%d][%d]: ", i, j);
System.out.println("Informe um valor para o numerador e denominador: ");
Scanner input = new Scanner(System.in);
Fracao f = new Fracao(input.nextInt(),input.nextInt());
m[i][j] = f;
}
}
}
public Matriz[][] multiplicar(Matriz m1){
int i, j, k;
if(this.colunas != m1.linhas){
System.out.println("DIMENSÃO INVÁLIDA! O número de colunas da primeira matriz deve" +
"ser igual ao numero de linhas da segunda matriz!");
return null;
}
Matriz[][] mResultado = new Matriz[m1.linhas][this.colunas];
for(i = 0; i < this.linhas; ++i){
for(j = 0; j < m1.colunas; ++j){
for(k = 0; k < this.linhas; ++k){
mResultado[i][j] = this.m[i][j].multiplicar(m1[k][j]);
}
}
}
return mResultado;
}
public void exibirMatriz(){
int i, j;
for(i = 0; i < linhas; ++i){
for(j = 0; j < colunas; ++j){
System.out.printf(m[i][j].toString());
}
System.out.println("\n");
}
}
public int getLinhas() {
return linhas;
}
public void setLinhas(int linhas) {
this.linhas = linhas;
}
public int getColunas() {
return colunas;
}
public void setColunas(int colunas) {
this.colunas = colunas;
}
public Fracao[][] getM() {
return m;
}
public void setM(Fracao[][] m) {
this.m = m;
}
}[/code]
CÓDIGO DA CLASSE MAIN: onde são feita as chamadas dos métodos.
[code]
public class Main {
public static void main(String[] args) {
Fracao f1 = new Fracao(3, 5);
Fracao f2 = new Fracao(14, 10);
Fracao f3 = f1.somar(f2);
System.out.println("f3 = " + f3);
Fracao f4 = f1.subtrair(f2);
System.out.println("f4 = " + f4);
Fracao f5 = new Fracao(6, 9);
f5.simplificar();
System.out.println("f5 = " + f5);
Matriz m1 = new Matriz(2, 3);
m1.lerMatriz();
Matriz m2 = new Matriz(2, 3);
m2.lerMatriz();
m2.exibirMatriz();
Matriz m3 = m1.somar(m2);
//m3.exibirMatriz();
//Matriz m4 = m3.obterTransposta();
//m4.exibirMatriz();
}
}[/code]
Obrigado,
Daniel
PS: Se puderem me dar uma força na parte da multiplicação eu agradeço! E mais uma vez me desculpe se estou procedendo de forma incorreta.