Ir ao conteúdo
  • Cadastre-se

Java runtime error em java


Posts recomendados

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++;
        }

    }

}

 

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

@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.

 

Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

@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;
        }
    }
}

 

Link para o comentário
Compartilhar em outros sites

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³.

Link para o comentário
Compartilhar em outros sites

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;
        }
    }
}

 

Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!