Diogo Mata Posted December 14, 2020 at 02:01 PM Report Share #620690 Posted December 14, 2020 at 02:01 PM Boa tarde, Tenho uma duvida neste codigo pois foi me pedido para tirar dados de um array com 365 dados sendo que cada dado corresponde a um dia. Gostava de por quando imprime o pior dia e o melhor dia o dia do mês nao o dia do ano por exemplo: janeiro vai de 1 a 31 E fevereiro vai de 1 a 28 porem no programa vai de 32 a 59: int meses[] = { 31, 28, 31, 30, 31, 30, 31, 31 ,30 ,31 ,30 ,31}; int dadosAnuais[] = { 44, 188, -1, 8, 41, 41, 3, 31, 4, 88, 8, 81, 84, 88, 38, 46, 66, -1, 66, 63, 44, 44, 68, 44, 14, 38, 61, 84, 41, 81, 46, 38, 83, 63, 84, 83, 13, 43, 11, 44, 64, 44, 84, 8, 84, 81, 43, 4, 68, 84, 86, 11, 18, 4, 48, 84, 46, 41, 64, 44, 44, 44, 46, 8, 44, 81, 61, 43, 44, 14, 41, 46, 16, 81, 84, 13, 66, 48, 18, 88, 31, 36, 6, 8, 68, 46, 34, 46, 68, 46, 11, 36, 33, 36, 44, 64, 34, 44, 61, -1, 88, 38, 46, 36, 44, 48, 14, 46, 44, 44, 46, 64, 41, 84, 43, 4, 4, -3, 64, 66, 34, 61, 18, 86, 14, 43, 33, 68, 44, 1, 84, 83, 63, 14, -3, 68, 31, 41, 86, 64, 61, 41, 84, 84, 68, 81, 88, 46, 44, 81, 41, 43, 48, 64, 46, -1, 88, 14, -2, 34, 48, 86, 11, 88, 31, -3, 43, 31, 44, 6, 88, -3, 46, 11, 48, 86, 41, 63, 34, 84, 66, 61, 34, 48, 84, -1, 88, 44, 34, 63, 66, 46, 41, 48, 41, 36, 8, 81, 38, 64, 68, 43, 64, 66, 43, 46, 31, 66, 6, 81, 81, 34, 81, 8, 64, 14, 61, 41, 61, 64, 34, 86, 41, 68, 66, 38, 84, 38, -2, 6, 4, 64, 81, 31, 86, 14, 48, 44, -1, 34, 46, 44, 18, 48, 81, 81, 44, 46, 84, 86, 46, 41, 33, 84, 41, 68, 18, 44, 64, 48, 44, -3, 64, 86, 44, -2, 44, 43, 16, 64, 46, 31, 84, 88, 86, 48, 86, 48, 88, 11, 16, 64, -1, 6, 31, 46, 11, 83, 4, -3, 48, 48, 11, 48, 41, 81, 44, 41, 43, 81, 16, 64, 34, 66, 44, 61, 64, 88, 48, 88, 46, 64, 86, 84, 81, 41, 88, 81, 66, -1, 48, 34, 68, 46,111, 16, 63, -2, 64, -3, 46, 68, 18, 44, 68, 88, 44, -1, 38, 48, 34, 6, 11, 44, 84, 34, 44, 46, 64, 86, 11, 38, 64, 61, 44, 46, 83, 41, 83, 81, 66, 43, 14, 66, 64 }; Scanner teclado = new Scanner(System.in); //Cabeçalho apresentado + opção para escolher System.out.print("Ver estatisticas de que mês?\n" + " ________________________________________________ \n" + " | 1-Janeiro 2-Fevereiro |\n" + " | 3-Março 4-Abril |\n" + " | 5-Maio 6-Junho |\n" + " | 7-Julho 8-Agosto |\n" + " | 9-Setembro 10-Outubro |\n" + " |11-Novembro 12-Dezembro |\n" + " |Digite -5 para observar as estatísticas anuais.|\n" + " |Digite -4 para terminar a execução do programa.|\n" + " |_______________________________________________|\n"); int opcao=teclado.nextInt(); //Para ano com 366 dias ou 365 dias em que muda o nº de dias de Fevereiro if(dadosAnuais.length==365) { meses[1]=28; }else { meses[1]=29; } //Do-While para definir q o q está dentro disto irá acontecer até que seja introduzido o -4 do { /*Inicialização das variavéis * Dentro do ciclo pois cada vez que este voltar * ao ínicio as variáveis voltam a ser = 0*/ int soma=0,diaInicial=0, diaFinal=0,piorDia=0, melhorDia=0, dia=0, total=0; int situacao1=0, situacao2=0, situacao3=0; //Para estísticas anuais : Vai ser o comprimento todo do array dadosAnuais[] if (opcao==-5 ) { diaInicial=0; diaFinal=dadosAnuais.length; // Definir quais as opcões corretas para poder entrar dentro do ciclo } if (opcao>=1 && opcao<=12 || opcao==-5) { //Calcular o diaInicial e o diaFinal for(int d=0;d < opcao; d++) { diaFinal += meses[d]; diaInicial = diaFinal - meses[opcao-1]; } /*Calcular a soma dos valores + pior dia do mês * + melhor dia do mês + situação(#1,#2 e #3) * + soma das situações */ for ( dia=diaInicial; dia < diaFinal; dia++) { total+=dadosAnuais[dia]; if (dadosAnuais[dia] < dadosAnuais[piorDia] && dadosAnuais[dia]>=0) { piorDia = dia; }if(dadosAnuais[dia] > dadosAnuais[melhorDia]) { melhorDia = dia; }if(dadosAnuais[dia]==-1) { situacao1++; }if(dadosAnuais[dia]==-2) { situacao2++; }if(dadosAnuais[dia]==-3) { situacao3++; }soma=situacao1 + situacao2 + situacao3; } System.out.println("Total de recolhas de dados: "+total ); System.out.println("Pior dia: " + (piorDia+1) +" com " +dadosAnuais[piorDia] ); System.out.println("Melhor dia: " + (melhorDia+1) + " com " + dadosAnuais[melhorDia]); System.out.println("Total de dias que ocorreu a situação #1: "+ situacao1); System.out.println("Total de dias que ocorreu a situação #2: "+ situacao2); System.out.println("Total de dias que ocorreu a situação #3: "+ situacao3); System.out.println("Total de dias sem recolhas de dados: "+ soma); //Para poder escolher outra vez outra opção System.out.print("Ver estatisticas de que mês? (-5=Anuais -4=Fim) \n"); opcao=teclado.nextInt(); //Caso escolha a opção errada }else { System.out.println("Opção errada. Tente novamente: \n" + " ________________________________________________ \n" + " | 1-Janeiro 2-Fevereiro |\n" + " | 3-Março 4-Abril |\n" + " | 5-Maio 6-Junho |\n" + " | 7-Julho 8-Agosto |\n" + " | 9-Setembro 10-Outubro |\n" + " |11-Novembro 12-Dezembro |\n" + " |Digite -5 para observar as estatísticas anuais.|\n" + " |Digite -4 para terminar a execução do programa.|\n" + " |_______________________________________________|\n"); opcao=teclado.nextInt(); } //Este ciclo repete-se enquanto não for intoduzido o -4 }while (opcao!=-4); System.out.print("FIM"); teclado.close(); Link to comment Share on other sites More sharing options...
Joao Rolo Posted March 24, 2021 at 06:46 PM Report Share #621797 Posted March 24, 2021 at 06:46 PM Ola Experimente o java 8 java.time api. Tem aulas de data adequadas, etc. abaixo eu usei o Localdate e um Stream para obter os resultados. import java.time.LocalDate; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { int dadosAnuais[] = { 44, 188, -1, 8, 41, 41, 3, 31, 4, 88, 8, 81, 84, 88, 38, 46, 66, -1, 66, 63, 44, 44, 68, 44, 14, 38, 61, 84, 41, 81, 46, 38, 83, 63, 84, 83, 13, 43, 11, 44, 64, // fevereiro 44, 84, 8, 84, 81, 43, 4, 68, 84, 86, 11, 18, 4, 48, 84, 46, 41, 64, //fevereiro 44, 44, 44, 46, 8, 44, 81, 61, 43, 44, 14, 41, 46, 16, 81, 84, 13, 66, 48, 18, 88, 31, 36, 6, 8, 68, 46, 34, 46, 68, 46, 11, 36, 33, 36, 44, 64, 34, 44, 61, -1, 88, 38, 46, 36, 44, 48, 14, 46, 44, 44, 46, 64, 41, 84, 43, 4, 4, -3, 64, 66, 34, 61, 18, 86, 14, 43, 33, 68, 44, 1, 84, 83, 63, 14, -3, 68, 31, 41, 86, 64, 61, 41, 84, 84, 68, 81, 88, 46, 44, 81, 41, 43, 48, 64, 46, -1, 88, 14, -2, 34, 48, 86, 11, 88, 31, -3, 43, 31, 44, 6, 88, -3, 46, 11, 48, 86, 41, 63, 34, 84, 66, 61, 34, 48, 84, -1, 88, 44, 34, 63, 66, 46, 41, 48, 41, 36, 8, 81, 38, 64, 68, 43, 64, 66, 43, 46, 31, 66, 6, 81, 81, 34, 81, 8, 64, 14, 61, 41, 61, 64, 34, 86, 41, 68, 66, 38, 84, 38, -2, 6, 4, 64, 81, 31, 86, 14, 48, 44, -1, 34, 46, 44, 18, 48, 81, 81, 44, 46, 84, 86, 46, 41, 33, 84, 41, 68, 18, 44, 64, 48, 44, -3, 64, 86, 44, -2, 44, 43, 16, 64, 46, 31, 84, 88, 86, 48, 86, 48, 88, 11, 16, 64, -1, 6, 31, 46, 11, 83, 4, -3, 48, 48, 11, 48, 41, 81, 44, 41, 43, 81, 16, 64, 34, 66, 44, 61, 64, 88, 48, 88, 46, 64, 86, 84, 81, 41, 88, 81, 66, -1, 48, 34, 68, 46,111, 16, 63, -2, 64, -3, 46, 68, 18, 44, 68, 88, 44, -1, 38, 48, 34, 6, 11, 44, 84, 34, 44, 46, 64, 86, 11, 38, 64, 61, 44, 46, 83, 41, 83, 81, 66, 43, 14, 66, 64 }; int ano = 2021; int dataDeInicio = LocalDate.of(ano,02,01).getDayOfYear(); int dataFinal = LocalDate.of(ano,02,28).getDayOfYear(); System.out.println("Dia de inicio = " + dataDeInicio + " dia final = " + dataFinal); List<Integer> valores = Arrays.stream(dadosAnuais).skip(dataDeInicio-1).limit(28).mapToObj(i -> i).collect(Collectors.toList()); System.out.println(valores); int minimo = Arrays.stream(dadosAnuais).skip(dataDeInicio-1).limit(28).min().getAsInt();// array começa com zero int maximo = Arrays.stream(dadosAnuais).skip(dataDeInicio-1).limit(28).max().getAsInt();// array começa com zero LocalDate piorDia = LocalDate.of(ano,02,valores.indexOf((Integer)minimo)+1); LocalDate melhorDia = LocalDate.of(ano,02,valores.indexOf((Integer)maximo)+1); System.out.format("O pior dia foi %s com o valor de %d\n e o melhor dia foi %s com o valor de %d ", piorDia,minimo,melhorDia,maximo ); } } outputs Dia de inicio = 32 dia final = 59 [38, 83, 63, 84, 83, 13, 43, 11, 44, 64, 44, 84, 8, 84, 81, 43, 4, 68, 84, 86, 11, 18, 4, 48, 84, 46, 41, 64] O pior dia foi 2021-02-17 com o valor de 4 e o melhor dia foi 2021-02-20 com o valor de 86 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now