Ir ao conteúdo

Posts recomendados

Postado

Estou com um problema no seguinte código. Estou fazendo o desafio 1023 na URI e o meu código esta retornando Runtime Error. Mas não estou encontrando o problema.

 

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
 
        Scanner ler = new Scanner (System.in);
        int num;
        int i,n1,n2,j=1;
        int[] contas;
        int[] refs;

        for(;;){
            num = ler.nextInt();
            if(num==0){
                break;
            }else{
                System.out.print("\n\n");
            }
            contas = new int[num];
            refs = new int[200];
            int sumP=0,sumA=0;
            float mediaF=0;
            int mediaP=0;

            for(i=0;i<num;i++){
                n1=ler.nextInt();
                n2=ler.nextInt();
                sumP+=n1;
                sumA+=n2;
                mediaP=sumA*100/sumP;
                mediaF=(float)mediaP/100;
                contas[i]=n2/n1;
                refs[contas[i]]+=n1;
            }
            Arrays.sort(contas);
            System.out.print("Cidade# "+j+":\n");
            for(i=0;i<num;i++){
                System.out.print(refs[contas[i]]+"-"+contas[i]+" ");
                if(i+1<num  && contas[i]==contas[i+1]){
                    i++;
                }
            }
            System.out.printf("\nConsumo medio: %.2f m3.",mediaF);
            j++;
        }

    }

}

 

Postado

Aparece o seguinte erro

 

Citação

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 200 out of bounds for length 200 at Main.main(Main.java:35)

 

 

Postado

Esse site deve rodar um teste automatizado no seu código, e deve ter descobrido que determinada combinação de valores, faz seu código lançar uma exceção. Acho que você deveria testar com o máximo de combinações que puder até achar a que lança a exceção, a partir daí tem que investigar para saber o motivo.

  • Curtir 1
Postado

@AdrianoSiqueira o problema é o seguinte

Citação

Devido às constantes estiagens que aconteceram nos últimos tempos em algumas regiões do Brasil, o governo federal criou um órgão para a avaliação do consumo destas regiões com finalidade de verificar o comportamento da população na época de racionamento. Este órgão responsável irá pegar algumas cidades (por amostragem) e verificará como está sendo o consumo de cada uma das pessoas da cidade e o consumo médio de cada cidade por habitante.

Entrada

A entrada contém vários casos de teste. A primeira linha de cada caso de teste contém um inteiro N (1 ≤ N ≤ 1*106), indicando a quantidade de imóveis. As N linhas contém um par de valores X (1 ≤ X ≤ 10) e Y (1 ≤ Y ≤ 200), indicando a quantidade de moradores de cada imóvel e o respectivo consumo total de cada imóvel (em m3). Com certeza, nenhuma residência consome mais do que 200 m3 por mês. O final da entrada é representado pelo número zero.

Saída

Para cada entrada, deve-se apresentar a mensagem “Cidade# n:”, onde n é o número da cidade seguindo a sequência (1, 2, 3, ...) e em seguida deve-se listar, por ordem ascendente de consumo, a quantidade de pessoas seguido de um hífen e o consumo destas pessoas, arredondando o valor para baixo. Na terceira linha da saída deve-se mostrar o consumo médio por pessoa da cidade, com 2 casas decimais sem arredondamento, considerando o consumo real total. Imprimir uma linha em branco entre dois casos de teste consecutivos. No fim da saída não deve haver uma linha em branco.

 

Postado

@Igor Vargas Veja se isso te ajuda de alguma forma. Implementei a solução usando Orientação a Objetos, pois sua lógica estava bem confusa. O programa roda de maneira autônoma, então vai precisar adaptar umas coisas para atender suas necessidades.

Spoiler

/*
 * Atividade
 * Devido às constantes estiagens que aconteceram nos últimos tempos em algumas
 * regiões do Brasil, o governo federal criou um órgão para a avaliação do
 * consumo destas regiões com finalidade de verificar o comportamento da população
 * na época de racionamento. Este órgão responsável irá pegar algumas cidades
 * (por amostragem) e verificará como está sendo o consumo de cada uma das pessoas
 * da cidade e o consumo médio de cada cidade por habitante.
 *
 * Entrada
 * A entrada contém vários casos de teste. A primeira linha de cada caso de teste
 * contém um inteiro N (1 ≤ N ≤ 1*106), indicando a quantidade de imóveis. As N
 * linhas contém um par de valores X (1 ≤ X ≤ 10) e Y (1 ≤ Y ≤ 200), indicando a
 * quantidade de moradores de cada imóvel e o respectivo consumo total de cada
 * imóvel (em m3). Com certeza, nenhuma residência consome mais do que 200 m3 por
 * mês. O final da entrada é representado pelo número zero.
 *
 * Saída
 * Para cada entrada, deve-se apresentar a mensagem “Cidade# n:”, onde n é o
 * número da cidade seguindo a sequência (1, 2, 3, ...) e em seguida deve-se listar,
 * por ordem ascendente de consumo, a quantidade de pessoas seguido de um hífen
 * e o consumo destas pessoas, arredondando o valor para baixo. Na terceira linha
 * da saída deve-se mostrar o consumo médio por pessoa da cidade, com 2 casas
 * decimais sem arredondamento, considerando o consumo real total. Imprimir uma
 * linha em branco entre dois casos de teste consecutivos. No fim da saída não
 * deve haver uma linha em branco.
 *
 * Programa
 * Esse programa executa de forma automatizada um ciclo de quantidade aleatória
 * entre 0 e 10 repetições, para cada ciclo é gerada uma cidade com uma quantidade
 * de residências que varia entre 1 e 20. Cada uma dessas residências é
 * inicializada com um valor aleatório de moradores e consumo respeitando os
 * respectivos limites.
 */

package code;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;

public class Main {

    public static final Random RANDOM = new Random();

    public static void main(String[] args) {
        int quantidade = RANDOM.nextInt(10);

        for (int i = 0; i < quantidade; i++) {
            Cidade cidade = Cidade.gerar();
            cidade.residencias.sort(Comparator.comparingInt(o -> o.consumo));

            System.out.println("Cidade #" + (i + 1));
            System.out.println(cidade.residencias);
            System.out.printf("%.2f \n", cidade.calcularConsumoPorHabitante());

            if (i + 1 < quantidade) {
                System.out.println();
            }
        }
    }


    /**
     * Classe de modelagem de uma residência.
     */
    private static class Residencia {

        public int moradores;
        public int consumo;

        public Residencia() {
        }

        /**
         * Gera uma {@link Residencia} com quantidades aleatórias de moradores
         * e de consumo.
         *
         * @return Uma instância de {@link Residencia}.
         */
        public static Residencia gerar() {
            Residencia residencia = new Residencia();
            residencia.moradores = RANDOM.nextInt(10) + 1;  // [ 1 -  10 ]
            residencia.consumo = RANDOM.nextInt(201);       // [ 0 - 200]

            return residencia;
        }

        @Override
        public String toString() {
            return moradores + " - " + consumo;
        }
    }

    /**
     * Classe de modelagem de uma cidade.
     */
    private static class Cidade {
        public List<Residencia> residencias = new ArrayList<>();

        /**
         * Gera uma {@link Cidade} com quantidade aleatória de {@link Residencia}s.
         *
         * @return Uma instância de {@link Cidade}.
         */
        public static Cidade gerar() {
            int quantidade = RANDOM.nextInt(20) + 1;     // [ 1 - 20 ]

            Cidade cidade = new Cidade();

            for (int i = 0; i < quantidade; i++) {
                Residencia residencia = Residencia.gerar();
                cidade.residencias.add(residencia);
            }

            return cidade;
        }

        /**
         * Calcula o consumo de médio por habitante. Esse método divide o consumo
         * total de todas as residências pelo total de habitantes de todas as
         * residências.
         *
         * @return Consumo médio por habitante.
         */
        public double calcularConsumoPorHabitante() {
            int habitantes = 0;
            double consumo = 0.0;

            for (Residencia residencia : residencias) {
                habitantes += residencia.moradores;
                consumo += residencia.consumo;
            }

            return (habitantes != 0)
                    ? consumo / habitantes
                    : 0.0;
        }
    }
}

 

 

  • Obrigado 1
Postado

Você entendeu o que cada uma das funções está fazendo e qual a finalidade de cada uma das variáveis?

 

Para deixar o programa manual, troque tudo o que foi gerado aleatoriamente (usando RANDOM) por uma entrada do usuário (usando Scanner, por exemplo), só isso.

  • Curtir 1
Postado

@AdrianoSiqueira Sim, entendi.  Quando eu testo os seguintes numeros ele retorna errado.

Citação

Entrada

3
3 22
2 11
3 39

A saída é

Cidade# 1:
2-5 3-7 3-13
Consumo medio: 9.00 m3

codigo abaixo.

package teste;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class teste2 {

    public static final Random RANDOM = new Random();

    public static void main(String[] args) {
    	Scanner num = new Scanner(System.in);
        int quantidade = num.nextInt();

        for (int i = 0; i < quantidade; i++) {
            Cidade cidade = Cidade.gerar(quantidade);
            cidade.residencias.sort(Comparator.comparingInt(o -> o.consumo));

            System.out.println("Cidade #" + (i + 1));
            String p1 = "Consumo medio:";
            String p2 = "m3.";
            System.out.println(cidade.residencias.toString().replace("[", "").replace("]","").replace(",", ""));
            System.out.printf("%s %.2f %s\n",p1, cidade.calcularConsumoPorHabitante(), p2);

            if (i + 1 < quantidade) {
                System.out.println();
            }
        }
    }


    /**
     * Classe de modelagem de uma residência.
     */
    private static class Residencia {

        public int moradores;
        public int consumo;

        public Residencia() {
        }

        /**
         * Gera uma {@link Residencia} com quantidades aleatórias de moradores
         * e de consumo.
         *
         * @return Uma instância de {@link Residencia}.
         */
        public static Residencia gerar() {
        	Scanner num = new Scanner(System.in);
            Residencia residencia = new Residencia();
            residencia.moradores = num.nextInt();  // [ 1 -  10 ]
            residencia.consumo = num.nextInt();       // [ 0 - 200]

            return residencia;
        }

        @Override
        public String toString() {
        	
            return moradores + "-" + consumo;
        }
    }

    /**
     * Classe de modelagem de uma cidade.
     */
    private static class Cidade {
        public List<Residencia> residencias = new ArrayList<>();

        /**
         * Gera uma {@link Cidade} com quantidade aleatória de {@link Residencia}s.
         *
         * @return Uma instância de {@link Cidade}.
         */
        public static Cidade gerar(int qtd) {
        	Scanner num = new Scanner(System.in);
            int quantidade = qtd;     // [ 1 - 20 ]

            Cidade cidade = new Cidade();

            for (int i = 0; i < quantidade; i++) {
                Residencia residencia = Residencia.gerar();
                cidade.residencias.add(residencia);
            }

            return cidade;
        }

        /**
         * Calcula o consumo de médio por habitante. Esse método divide o consumo
         * total de todas as residências pelo total de habitantes de todas as
         * residências.
         *
         * @return Consumo médio por habitante.
         */
        public double calcularConsumoPorHabitante() {
            int habitantes = 0;
            double consumo = 0.0;

            for (Residencia residencia : residencias) {
                habitantes += residencia.moradores;
                consumo += residencia.consumo;
            }

            return (habitantes != 0)
                    ? consumo / habitantes
                    : 0.0;
        }
    }
}

 

Postado
2 horas atrás, Igor Vargas disse:

Entrada

3
3 22
2 11
3 39

A saída é

Cidade# 1:
2-5 3-7 3-13
Consumo medio: 9.00 m3

 

Qual resultado deveria ter sido retornado? No meu entendimento, está certo:

22 + 11 + 39 = 72
3 + 2 + 3 = 8
72 / 8 = 9

 

Cada habitante dessa cidade consumiu em média 9 m³.

Postado
3 horas atrás, Igor Vargas disse:

@AdrianoSiqueira  Eu não entendi como é feito esse calculo.

 

consegui resolver. Mas mesmo dando a resposta certa o site diz que está errado. O código ficou assim

package teste;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;
import java.util.Scanner;


public class teste2 {

    public static final Random RANDOM = new Random();

    public static void main(String[] args) {
    	Scanner num = new Scanner(System.in);
        int quantidade = num.nextInt();

        for (int i = 0; i < quantidade; i++) {
            Cidade cidade = Cidade.gerar(quantidade);
            cidade.residencias.sort(Comparator.comparingInt(o -> o.consumo));

            System.out.println("Cidade# " + (i + 1));
            String p1 = "Consumo medio:";
            String p2 = "m3.";
            
            System.out.println(cidade.residencias.toString().replace("[", "").replace("]","").replace(",", ""));
            System.out.printf("%s %.2f %s\n",p1, cidade.calcularConsumoPorHabitante(), p2);

            if (i + 1 < quantidade) {
                System.out.println();
            }
        }
    }


  
    private static class Residencia {

        public int moradores;
        public int consumo;
        public int media;
        public Residencia() {
        }

     
        public static Residencia gerar() {
        	Scanner num = new Scanner(System.in);
            Residencia residencia = new Residencia();
            residencia.moradores = num.nextInt();  // [ 1 -  10 ]
            residencia.consumo = num.nextInt();       // [ 0 - 200]
            
            residencia.media = residencia.consumo / residencia.moradores;	

            return residencia;
        }
        
    

        @Override
        public String toString() {
        	
    		
            return moradores + "-" + media;
        }
    }

    
    private static class Cidade {
        public List<Residencia> residencias = new ArrayList<>();

       
        public static Cidade gerar(int qtd) {
        	Scanner num = new Scanner(System.in);
            int quantidade = qtd;     // [ 1 - 20 ]

            Cidade cidade = new Cidade();

            for (int i = 0; i < quantidade; i++) {
                Residencia residencia = Residencia.gerar();
                cidade.residencias.add(residencia);
            }

            return cidade;
        }

      
        public double calcularConsumoPorHabitante() {
        	int habitantes=0;
        	double consumo=0.0;
        	

            for (Residencia residencia : residencias) {
                habitantes += residencia.moradores;
                consumo += residencia.consumo;
               
                
            }
            	
            return (habitantes != 0)
                    ? consumo / habitantes
                    : 0.0;
        }
    }
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!