Bom dia,
Fiz este codigo, mas queria seaber se é possivel melhorar. Tipo com metodos?!
Muito obrigado pela ajuda.
package mtdisc;
import java.util.Scanner;
import java.util.*;
import java.math.BigInteger;
/**
*
* @author filip
*/
public class MTDISC {
// Fatorial de um numero
public static BigInteger fatorial( int numero ){
BigInteger factorial = new BigInteger("1");
for (int i = 1; i <= numero; i++) {
factorial = factorial.multiply(new BigInteger(i + ""));
}
return factorial;
}
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
System.out.println("Insira um valor: ");
long tempoInicial = System.currentTimeMillis();
int valor = ler.nextInt();
System.out.println("Fatorial: "+fatorial(valor));
long tempoFinal = System.currentTimeMillis();
long tempoExe = tempoFinal - tempoInicial;
System.out.println("Tempo de execução: "+ tempoExe+" milissegundos");
// Introdução dos valores da matriz no formato x,y,z,...
Scanner ler1 = new Scanner(System.in);
System.out.println("Introduza os valores: ");
String stringDeNumeros = ler1.nextLine();
// converte a string para um vetor de strings
String[] vetorString = stringDeNumeros.split(",");
int vetorInt[] = new int[vetorString.length];
// converte de string para inteiros
try {
for(int i = 0; i < vetorString.length; ++i) {
vetorInt[i] = Integer.parseInt(vetorString[i].trim());
}
}catch(NumberFormatException e){
System.out.println("Erro: Não introduziu apenas numeros! " + e);
}
// converte o vetor para uma matriz
double ordemMatriz=Math.sqrt(vetorInt.length);
int ordem=(int)ordemMatriz;
int counter =0;
int M[][]= new int[ordem][ordem];
try {
for(int i = 0; i<ordemMatriz; i++) {
for(int j =0; j<ordemMatriz; j++){
M[i][j]=vetorInt[counter++];
}
}
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("Erro: Não introduziu valores correspondentes a uma matriz quadrada! " + e );
}
// imprime a matriz
for (int l = 0; l < M.length; l++) {
for (int c = 0; c < M[0].length; c++) {
// matem o espaçamento entre os valores de acordo com o numero de algarismos
if (M[l][c]<10){
System.out.print(" "+M[l][c] + " "); //imprime caracter a caracter
}
else {
System.out.print(" "+M[l][c] + " "); //imprime caracter a caracter
}
}
System.out.println(" "); //muda de linha
}
// gerar matrizes aleatoriamente com valores entre [0,100] com as diagonais em zero.
// definir ordem da matriz
System.out.println(" ");
System.out.println("Insira a ordem da matriz a gerar: ");
int ord= ler1.nextInt();
Random gerador = new Random();
int MatAle[][] = new int[ord][ord];
for(int i=0;i<ord;i++){
for(int j=0;j<ord;j++){
if(i==j)
MatAle[i][j] = 0;
else {
int ger=gerador.nextInt(100);
MatAle[i][j] = ger;
MatAle[j][i] = ger;
}
}
}
System.out.println(" ");
// Imprimir matriz gerada aleatoriamente
System.out.println("Matriz gerada aleatoriamente de ordem "+ord+":");
System.out.println(" ");
for (int l = 0; l < MatAle.length; l++) {
for (int c = 0; c < MatAle[0].length; c++) {
// matem o espaçamento entre os valores de acordo com o numero de algarismos
if (MatAle[l][c]<10){
System.out.print(MatAle[l][c] + " "); //imprime caracter a caracter
}
else {
System.out.print(MatAle[l][c] + " "); //imprime caracter a caracter
}
}
System.out.println(" "); //muda de linha
}
}
}