how would I monitor disc activity in java for windows 10

I am creating a program that needs to monitor the hard drive/ssd activity. Now I’m not trying to figure out how much space is on my disc/free space. I am trying to figure out what the activity percentage for a disc is in java.

java – Optimal way of running hundreds of thousands of DDL/DML statements MYSQL

I have have about 500k DDL/DML statements that need to be run against a MYSQL 5.7 INNODB RDS instance from scratch. A significant portion of these are create table statements. I’m currently employing a microservice built on Java and using Flyway to run these statements (the service lives in ECS and connects directly to the RDS). This takes about 35 minutes to run all the statements (according to flyway docs, each statement makes a single round trip network request) and these statements have to be repeated as well to further create more schemas/tables (it’s essentially tenants/environments). I am trying to optimize this to reduce this time by as much as I can and wanted some advice on how best to handle? Should we just be using mysqldump and restore? Should i create my own custom myqsl runner and try to batch the requests?

Como ordeno las salidas de un método (Ascendente y descendente) en Java (Simulador de carrera)

1.Tengo una competencia, en donde se trata de simular una carrera, los tiempos y los competidores,
se generan de forma aleatoria, existen 5 competencias y cada competidor debe de competir en las
5 competencias las cuales van por edad y equipos.

    package capalogica;

import java.util.Arrays;

import java.util.HashSet;

import java.util.Set;

public class competencias {

    private CincoCompetencias() arregloArticulos;
    private final int ETAPAS = 5;
    private final int COMPETIDORES = 10;
    private competidores()() etapas = new competidores(ETAPAS)(COMPETIDORES);
    private competidores() GuardaCompetidores = new competidores(COMPETIDORES);
    private competidores objCompetidores = new competidores();

    public competencias() {

    }

    public void generarCompetencias() {
        int vueltas = (int) (Math.random() * 31) + 20;
        double pulgadas = 8150 * vueltas;
        double kilometraje = 0.20701 * pulgadas;

    }

    
    public void generaCompetidores() {

        int Busqueda = 0;
        int cedula = 0;
        int edad = 0;
        String categoria = "";
        String equipo = "";
        boolean encontro;
        int tamanno = 0;
        for (int i = 0; i < COMPETIDORES; i++) {
            competidores objCompetidores = new competidores();
            cedula = (int) (Math.random() * 401) + 100;
            edad = (int) (Math.random() * 63) + 18;
            if (edad >= 18 && edad <= 25) {
                categoria = "Juvenil";
            } else {
                if (edad >= 26 && edad <= 35) {
                    categoria = "Adulto";
                } else {
                    if (edad >= 36 && edad <= 45) {
                        categoria = "Adulto Mayor";
                    } else {
                        if (edad >= 46 && edad <= 55) {
                            categoria = "Veterano";
                        } else {
                            categoria = "Oro";
                        }
                    }
                }
                encontro = false;
                for (Busqueda = 0; Busqueda < i; Busqueda++) {
                    if (GuardaCompetidores(Busqueda).getCedula() == cedula) {
                        encontro = true;
                        break;
                    }
                }
            }
            if (edad >= 18 && edad <= 20) {
                equipo = " Rápidos y Furiosos";
            } else {
                if (edad >= 21 && edad <= 30) {
                    equipo = "Velocidad Total";
                } else {
                    if (edad >= 31 && edad <= 50) {
                        equipo = " Prudencia";
                    } else {
                        equipo = "Prudencia Total";
                    }
                }

            }
            objCompetidores.setCedula(cedula);
            objCompetidores.setEdad(edad);
            objCompetidores.setCategoria(categoria);
            objCompetidores.setEquipo(equipo);
            GuardaCompetidores(i) = objCompetidores;
            GuardaCompetidores(i).infoCompetidores();
            etapas(tamanno)(i) = objCompetidores;

        }
    }

    public String imprimeCompetidores() {
        String hilera = "";
        int tamanno = 0;
        for (int i = 0; i < COMPETIDORES; i++) {
            objCompetidores = etapas(tamanno)(i);
            hilera += objCompetidores.infoCompetidores();
        }
        return hilera;
    }

    public void competirMangos() {
        int tiempo;
        for (int i = 0; i < COMPETIDORES; i++) {

            objCompetidores = etapas(0)(i);
            tiempo = (int) (Math.random() * 30000) + 2000;
            objCompetidores.setTiempoMangos(tiempo);
            etapas(1)(i) = objCompetidores;
            GuardaCompetidores(i) = objCompetidores;
        }
        this.Ordenar();
    }

    public void competirHato() {
        int tiempo;
        int tamanno = 0;
        int tamannoCompetidores = 0;
        for (int i = 0; i < COMPETIDORES; i++) {

            objCompetidores = etapas(tamannoCompetidores)(i);
            tiempo = (int) (Math.random() * 30000) + 10000;

            objCompetidores.setTiempoHato(tiempo);
            etapas(tamanno)(i) = objCompetidores;

        }
        this.Ordenar();
    }

    public void competirChuchecas() {
        int tamanno = 1;
        int tamannoCompetidores = 0;
        int tiempo;
        for (int i = 0; i < COMPETIDORES; i++) {

            objCompetidores = etapas(tamannoCompetidores)(i);
            tiempo = (int) (Math.random() * 30000) + 5000;

            objCompetidores.setTiempoChuchecas(tiempo);
            etapas(tamanno)(i) = objCompetidores;

        }
        this.Ordenar();
    }

    public void competirGanaderos() {
        int tamanno = 1;
        int tamannoCompetidores = 0;
        int tiempo;
        for (int i = 0; i < COMPETIDORES; i++) {

            objCompetidores = etapas(0)(i);
            tiempo = (int) (Math.random() * 30000) + 30000;

            objCompetidores.setTiempoGanaderos(tiempo);
            etapas(2)(i) = objCompetidores;

        }
        this.Ordenar();
    }

    public void competirPampa() {
        int tiempo;
        for (int i = 0; i < COMPETIDORES; i++) {

            objCompetidores = etapas(0)(i);
            tiempo = (int) (Math.random() * 30000) + 30000;

            objCompetidores.setTiempoPampa(tiempo);
            etapas(1)(i) = objCompetidores;

        }
        this.Ordenar();
    }

    public int sumaTiemposEquipoRapidos() {
        int tiempo = 0;
        for (int i = 0; i < COMPETIDORES; i++) {
            competidores objCompetidores = GuardaCompetidores(i);
            if (GuardaCompetidores(i).getEquipo().contains("Rápidos y Furiosos")) {
                tiempo += objCompetidores.getTiempoMangos() + objCompetidores.getTiempoHato()
                        + objCompetidores.getTiempoChuchecas() + objCompetidores.getTiempoGanaderos()
                        + objCompetidores.getTiempoPampa();

            }

        }
        return tiempo;
    }

    public String imprime() {
        String hileraM = "";
        String hileraH = "";
        String hileraC = "";
        String hileraG = "";
        String hileraP = "";

        for (int i = 0; i < COMPETIDORES; i++) {
            objCompetidores = etapas(1)(i);
            hileraM += objCompetidores.infoCompeticionMangos();
            hileraH += objCompetidores.infoCompeticionHato();
            hileraC += objCompetidores.infoCompeticionChuchecas();
            hileraG += objCompetidores.infoCompeticionGanaderos();
            hileraP += objCompetidores.infoCompeticionPampa();
        }

        return "Mangosn" + hileraM + "nHaton" + hileraH + "nChuchecasn" + hileraC
                + "nGanaderosn" + hileraG + "nPampan" + hileraP;
    }

    public void Ordenar() {
        int tamanno = 1;
        competidores tiempoCompetidores = new competidores();
        for (int i = 0; i < COMPETIDORES; i++) {
            for (int j = 0; j < COMPETIDORES - 1; j++) {

                if (etapas(tamanno)(j).getTiempoMangos() > etapas(tamanno)(j + 1).getTiempoMangos()) {
                    tiempoCompetidores = etapas(tamanno)(j + 1);
                    etapas(tamanno)(j + 1) = etapas(tamanno)(j);
                    etapas(tamanno)(j) = tiempoCompetidores;
                }

            }

        }

    }
}

2.Tengo competidores

public class competidores {

       
    private int cedula;
    private int edad;
    private String categoria;
    private String equipo;

    private int tiempoMangos;
    private int tiempoHato;
    private int tiempoChuchecas;
    private int tiempoGanaderos;
    private int tiempoPampa;
    private int TiempoAcumulado;

    public competidores() {
    }

    public int getCedula() {
        return cedula;
    }

    public void setCedula(int cedula) {
        this.cedula = cedula;
    }

    public int getEdad() {
        return edad;
    }

    public void setEdad(int edad) {
        this.edad = edad;
    }

    public String getCategoria() {
        return categoria;
    }

    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

    public String getEquipo() {
        return equipo;
    }

    public void setEquipo(String equipo) {
        this.equipo = equipo;
    }

    public int getTiempoMangos() {
        return tiempoMangos;
    }

    public void setTiempoMangos(int tiempoMangos) {
        this.tiempoMangos = tiempoMangos;
    }

    public int getTiempoHato() {
        return tiempoHato;
    }

    public void setTiempoHato(int tiempoHato) {
        this.tiempoHato = tiempoHato;
    }

    public int getTiempoChuchecas() {
        return tiempoChuchecas;
    }

    public void setTiempoChuchecas(int tiempoChuchecas) {
        this.tiempoChuchecas = tiempoChuchecas;
    }

    public int getTiempoGanaderos() {
        return tiempoGanaderos;
    }

    public void setTiempoGanaderos(int tiempoGanaderos) {
        this.tiempoGanaderos = tiempoGanaderos;
    }

    public int getTiempoPampa() {
        return tiempoPampa;
    }

    public void setTiempoPampa(int tiempoPampa) {
        this.tiempoPampa = tiempoPampa;
    }

    public int getTiempoAcumulado() {
        return TiempoAcumulado;
    }

    public void setTiempoAcumulado(int TiempoAcumulado) {
        this.TiempoAcumulado = TiempoAcumulado;
    }

    
    
        public String infoCompetidores() {
         
        
        String hilera = this.getCedula() + "-" + this.getEdad() + "-" + this.getCategoria() + "-" + this.getEquipo() + "n";
       
        return hilera;

    }

    public String infoCompeticionMangos() {
        String hilera;
        hilera = this.getCedula() + "-" + this.getEdad() + "-" + this.getCategoria() + "-" + this.getEquipo()+ "-"  + this.getTiempoMangos() + "n";
        return hilera;

    }

    public String infoCompeticionHato() {
        String hilera;
        hilera = this.getCedula() + "-" +  this.getEdad() + "-" + this.getCategoria() + "-" + this.getEquipo()+ "-"  + this.getTiempoHato() + "n";
        return hilera;

    }

    public String infoCompeticionChuchecas() {
        String hilera;
        hilera = this.getCedula() + "-" +this.getEdad() + "-" + this.getCategoria() + "-" + this.getEquipo()+ "-"  + this.getTiempoChuchecas() + "n";
        return hilera;

    }

    public String infoCompeticionGanaderos() {
        String hilera;
        hilera = this.getCedula() + "-" +  this.getEdad() + "-" + this.getCategoria() + "-" + this.getEquipo()+ "-"  + this.getTiempoGanaderos() + "n";
        return hilera;

    }

    public String infoCompeticionPampa() {
        String hilera;
        hilera = this.getCedula() + "-" +  this.getEdad() + "-" + this.getCategoria() + "-" + this.getEquipo()+ "-"  + this.getTiempoPampa() + "n";
        return hilera;

    }

    public String infoCompeticionAcumulado() {
        String hilera;
        hilera =this.getCedula() + "-"  + this.getEdad() + "-" + this.getCategoria() + "-" + this.getEquipo()+ "-"  + this.getTiempoAcumulado() + "n";
        return hilera;

    }

}

3.Tengo 5 competencias, en donde todos los competidores deben de competir para salir un ganador

public class CincoCompetencias {
    private String Mangos;
    private String Hato;
    private String Chuchecas;
    private String Ganaderos;
    private String Pampa;
    private int vueltasMangos;
    private int vueltasHato;
    private int vueltasChuchecas;
    private int vueltasGanaderos;
    private int vueltasPampa;

    

    public String getMangos() {
        return Mangos;
    }

    public void setMangos(String Mangos) {
        this.Mangos = Mangos;
    }

    public String getHato() {
        return Hato;
    }

    public void setHato(String Hato) {
        this.Hato = Hato;
    }

    public String getChuchecas() {
        return Chuchecas;
    }

    public void setChuchecas(String Chuchecas) {
        this.Chuchecas = Chuchecas;
    }

    public String getGanaderos() {
        return Ganaderos;
    }

    public void setGanaderos(String Ganaderos) {
        this.Ganaderos = Ganaderos;
    }

    public String getPampa() {
        return Pampa;
    }

    public void setPampa(String Pampa) {
        this.Pampa = Pampa;
    }

    public int getVueltasMangos() {
        return vueltasMangos;
    }

    public void setVueltasMangos(int vueltasMangos) {
        this.vueltasMangos = vueltasMangos;
    }

    public int getVueltasHato() {
        return vueltasHato;
    }

    public void setVueltasHato(int vueltasHato) {
        this.vueltasHato = vueltasHato;
    }

    public int getVueltasChuchecas() {
        return vueltasChuchecas;
    }

    public void setVueltasChuchecas(int vueltasChuchecas) {
        this.vueltasChuchecas = vueltasChuchecas;
    }

    public int getVueltasGanaderos() {
        return vueltasGanaderos;
    }

    public void setVueltasGanaderos(int vueltasGanaderos) {
        this.vueltasGanaderos = vueltasGanaderos;
    }

    public int getVueltasPampa() {
        return vueltasPampa;
    }

    public void setVueltasPampa(int vueltasPampa) {
        this.vueltasPampa = vueltasPampa;
    } 
    
}

4.Éstos son ejemplo de salidas.

             Ganaderos 
279-22-Juvenil-Velocidad Total-59842

361-51-Veterano-Prudencia Total-57375

338-41-Adulto Mayor- Prudencia-43261

489-37-Adulto Mayor- Prudencia-36410

244-64-Oro-Prudencia Total-49057

352-36-Adulto Mayor- Prudencia-37919

212-78-Oro-Prudencia Total-42080

135-71-Oro-Prudencia Total-42899

209-25-Juvenil-Velocidad Total-43595

243-37-Adulto Mayor- Prudencia-36902

5.No logro ordenar estas salidas por el último campo(es decir ordenar por tiempo), traté de colocar el método ordenar dentro de las competencias pero no logré que se ordeneran por el tiempo.

6.Tampoco logro mostrar el ganador que sería el de menor tiempo 1er lugar, 2do lugar y 3er lugar(tiempo del primero – tiempo del segundo…)

json rpc – How to communicate between Java and bitcoind?

One of the problems of Java is the verbosity of the language. However, it is also true that the life of the language it is very old in these that.

I fall into the problem to talk with the bitcoin rpc interface for one of my side projects on c-lightning and I was not able to find a clean library that is able to talk also with other rpc interfaces derived from bitcoin core, like litecoin. In addition, I found also a library that is easy like a python library.

My result of designing a library that respect this requirement, it is called lite-bitcoin-rpc and it is available on GitHub https://github.com/clightning4j/lite-bitcoin-rpc

This is an easy library because with gives the possibility to write the JSON wrapper in a Java class and use it to decode the response. The end-user need only to feel a map with parameters and create the Java class where decode the JSON payload received from bitcoin core.

An example can be found in the test directory https://github.com/clightning4j/lite-bitcoin-rpc/tree/main/lib/src/test

and a code example can be

public class LiteBitcoinRPCTest {

  private LiteBitcoinRPC bitcoinRPC;

  public LiteBitcoinRPCTest() {
    this.bitcoinRPC = new LiteBitcoinRPC("sandbox", "sandbox", "http://127.0.0.1:18333/");
  }

  @Test
  public void getBlockchainInfo() {
    try {
      BlockchainInfo info =
          bitcoinRPC.makeBitcoinRequest("getblockchaininfo", BlockchainInfo.class);
      TestCase.assertEquals(info.getChain(), "regtest");
    } catch (Exception e) {
      e.printStackTrace();
      TestCase.fail(e.getLocalizedMessage());
    }
  }

  @Test
  public void estimateFeeRateWithError() {
    Parameters parameters = new Parameters("estimatesmartfee");
    parameters.addParameter("conf_target", 6);
    try {
      BitcoinEstimateFee feee = bitcoinRPC.makeBitcoinRequest(parameters, BitcoinEstimateFee.class);
      TestCase.assertFalse(feee.getErrors().isEmpty());
    } catch (LiteBitcoinRPCException | BitcoinCoreException e) {
      TestCase.fail(e.getMessage());
    }
  }

java – Identificar objetos novos, removidos e modificados de duas “coleções” ordenadas usando memória extra O(1) em tempo O(N)

Eu tenho 2 “conjuntos” de elementos, neo e old, que tem elementos do tipo T, todos não nulos. Além disso, eu sei que esses elementos são identificados por uma chave K e eu posso extrair usando essa chave usando uma Function<T, K> getKey. Garanto a unicidade da chave dentro de neo e dentro de old (isto é, não existem 2 elementos de neo com a mesma chave, nem 2 elementos distintos de old com a mesma chave).

Além disso, eu garanto que os elementos em neo e old estão ordenados de modo estritamente decrescente nessa chave considerando um Comparator<K> keyComparator. Informalmente, como se neo(i).key < neo(j).key para todo i < j, e semelhantemente old(i).key < old(j).key.

Eu defino que um elemento oldEl foi removido se old.contains(oldEl) e se não existir nenhum neoEl pertencente a neo tal que getkey.apply(oldEl).equals(getkey.apply(neoEl)).

Eu defino uma modificação neoEl se neo.contains(neoEl) e se existir algum oldEl pertencente a old tal que getkey.apply(oldEl).equals(getkey.apply(neoEl)), porém !oldEl.equals(neoEl) (se por acaso oldEl.equals(neoEl), devo considerar que o elemento aparece repetidamente).

Eu defino uma criação do elemento neoEl se neo.contains(neoEl) e se não existir nenhum oldEl pertencente a old tal que getkey.apply(oldEl).equals(getkey.apply(neoEl)).

Até o momento, consegui fazer o seguinte:

final Consumer<T> NOOP = __ -> {};

public void doDelta(Iterator<T> old, Iterator<T> neo,
        Function<T, K> getkey, Comparator<K> keyComparator,
        Consumer<T> insertInterceptor,
        Consumer<T> updateInterceptor,
        Consumer<T> deleteInterceptor,
        Consumer<T> ignoreInterceptor) {

    final int TAKE_OLD = 1;
    final int TAKE_NEO = 2;
    final int TAKE_BOTH = TAKE_OLD | TAKE_NEO;
    int nextAction = TAKE_BOTH;
    T oldT = null, neoT = null;
    K oldK = null, neoK = null;

    if (!old.hasNext()) {
        // não há old, portanto só tem inserção
        if (insertInterceptor != NOOP) {
            neo.forEachRemaining(insertInterceptor);
        }
        return;
    }
    if (!neo.hasNext()) {
        // não há neo, portanto só tem remoção
        if (deleteInterceptor != NOOP) {
            old.forEachRemaining(deleteInterceptor);
        }
        return;
    }

    while (true) {
        if (nextAction == TAKE_BOTH) {
            if (!old.hasNext()) {
                if (!neo.hasNext()) {
                    return;
                }
                neoT = neo.next();
                nextAction = TAKE_NEO;
                break;
            }
            oldT = old.next();
            oldK = getkey.apply(oldT);
            if (!neo.hasNext()) {
                nextAction = TAKE_OLD;
                break;
            }
            neoT = neo.next();
            neoK = getkey.apply(neoT);
        } else if (nextAction == TAKE_OLD) {
            if (!old.hasNext()) {
                nextAction = TAKE_NEO;
                break;
            }
            oldT = old.next();
            oldK = getkey.apply(oldT);
        } else { //if (nextAction == TAKE_NEO) {
            if (!neo.hasNext()) {
                nextAction = TAKE_OLD;
                break;
            }
            neoT = neo.next();
            neoK = getkey.apply(neoT);
        }
        int cmp = keyComparator.compare(oldK, neoK);
        if (cmp == 0) {
            nextAction = TAKE_BOTH;
            if (oldT.equals(neoT)) {
                ignoreInterceptor.accept(neoT);
            } else {
                updateInterceptor.accept(neoT);
            }
        } else if (cmp < 0) {
            deleteInterceptor.accept(oldT);
            nextAction = TAKE_OLD;
        } else {
            insertInterceptor.accept(neoT);
            nextAction = TAKE_NEO;
        }
    }

    // entrou aqui porque acabou o old
    if (nextAction == TAKE_NEO) {
        if (insertInterceptor != NOOP) {
            insertInterceptor.accept(neoT);
            neo.forEachRemaining(insertInterceptor);
        }
        return;
    }
    if (nextAction == TAKE_OLD) {
        if (deleteInterceptor != NOOP) {
            deleteInterceptor.accept(oldT);
            old.forEachRemaining(deleteInterceptor);
        }
    }
}

A ideia é basicamente, a cada ciclo, saber se preciso puxar elemento do conjunto neo, do old ou de ambos; no começo precisa pegar elementos de ambos os conjuntos. Depois, o que pode acontecer enquanto houver elementos dos dois lados:

  • se a chave for a mesma, pegar de ambos e testar para ver se foi atualização ou o elemento se manteve idêntico
  • se a chave menor for do old, então esse elemento foi removido do novo conjunto de elementos e preciso pegar apenas do old
  • se a chave menor for do neo, então esse elemento foi criado no novo conjunto de elemento e preciso pegar apenas do neo

neo e old são definidos como Iterator<T> para não precisar carregar a priori toda a informação desses conjuntos na memória, mas outra alternativa lazy loading é válida também.

Os Consumer<T> fazem o trabalho de interceptar caso seja descoberto se o elemento é adicionado/removido/atualizado da lista (o ignoreInterceptor é usado mais como curiosidade caso um elemento se repita igual nos dois conjuntos).

O NOOP é o interceptador trivial, descarta silenciosamente caso receba algo.

Note que não há uso de memória extra nesse algoritmo, considerando que os Consumers, getkey, keyComparator e os equals das classes envolvidas sejam funções oráculo.

Também levando em consideração que Consumers, getkey, keyComparator e os equals das classes envolvidas sejam funções oráculo, farei no máximo O(|old| + |neo|) operações ao todo, portanto sigo que a complexidade temporal é linear no tamanho dos conjuntos.

O que me incomoda aqui são os casos quando se esgota uma das coleções, ou quando recebo uma coleção vazia. Parece que está muito convoluto e bagunçado o código. Como deixar mais limpo o código?

Teria como usar Stream para o fim que estou usando o Iterator? Isso poderia deixar mais limpo o código?

E Spliterator, teria alguma vantagem nele além de me garantir as características (comparador fornecido pelo próprio Spliterator, ordenado, distinto, não nulo)?

Problema em exercício de programação orientada a objetos JAVA

Boa noite, preciso usar get and set, porém é necessário instanciar 5 veículos, usando entrada de dados pelo teclado. Além disso, meu eclipse não reconhece a função JOptionPane.
Já foi criei as classes filho, pai, e também a main(obrigatória no exercício), com getters e setters, e rodam para 1 veículo apenas, código abaixo.

java – How to make a very simple game as a beginner?

java – How to make a very simple game as a beginner? – Game Development Stack Exchange

cryptography – Signing a text file using a pfx file in java

I’m very new to java cryptography. I’m trying to use a .pfx file that contains a public key, it’s private key and a digital certificate to sign a text file. I have been able to access the private key and certificates by loading the .pfx file to the java key store. I want to sign the data using the private key in the .pfx file and then append the digital certificate along with it. This snippet is what I wrote to generate a simple raw signature

I want to be able to do the same using the private key and certificate I get from the .pfx file. This is how I've loaded the key and certificate to the Java key store.

I’ve been stuck at this point for quite sometime. Kindly point me in the right direction. Thank you.

c# – ¿Cómo podría poner una condición para que solo me acepte números diferentes y no repetidos? JAVA

public static void main(String() args) {
    // TODO code application logic here
    System.out.println("Ingrese el tamaño de su agrreglo");
    Scanner leer = new Scanner(System.in);
    int cantidad_num;
    cantidad_num = leer.nextInt();
    int() Arr_numeros;
    int aux = 0;
    Arr_numeros = new int(cantidad_num);
    System.out.println("Ingrese numeros");

    for (int i = 0; i < cantidad_num; i++) {
        aux = aux + Arr_numeros(i);
        Arr_numeros(i) = leer.nextInt();

    }

    System.out.println("Sus numeros son : ");
    for (int i = 0; i < cantidad_num; i++) {
        System.out.println(Arr_numeros(i));
    }

}

Me gustaría saber como podría ponerle una condición para que pida solo números diferentes y no repetidos. De igual manera que me salga un mensaje que me diga que ingrese números diferentes.

java – How do I know if I’m taking too much time to solve a programming problem?

I’m learning Java for a few months, mainly through the Deitel‘s book “Java – How To Program, 10th Edition“, and now I am on the Chapter 7 learning about Arrays and ArrayLists where things started to get harder, so I decided to go back to Ch.4 to solve its questions (that I skipped) and improve my skills.

After 1h30min programming the Q17, I finally solved it and then found myself in the following question: “Am I taking a long time to solve these problems? Am I going around and around with something that could have been solved in a much simpler way?”.

As a beginner, I have no idea if this is a good time or not. I’d like to receive some opinions from experienced programmers and some tips to improve myself more and more.

Here’s the mentioned question:

4.17 (Gas Mileage) Drivers are concerned with the mileage their automobiles get. One driver has kept track of several trips by
recording the miles driven and gallons used for each tankful. Develop
a Java application that will input the miles driven and gallons used
(both as integers) for each trip. The program should calculate and
display the miles per gallon obtained for each trip and print the
combined miles per gallon obtained for all trips up to this point. All
averaging calculations should produce floating-point results. Use
class Scanner and sentinel-controlled repetition to obtain the data
from the user.

DreamProxies - Cheapest USA Elite Private Proxies 100 Cheap USA Private Proxies Buy 200 Cheap USA Private Proxies 400 Best Private Proxies Cheap 1000 USA Private Proxies 2000 USA Private Proxies 5000 Cheap USA Private Proxies ExtraProxies.com - Buy Cheap Private Proxies Buy 50 Private Proxies Buy 100 Private Proxies Buy 200 Private Proxies Buy 500 Private Proxies Buy 1000 Private Proxies Buy 2000 Private Proxies ProxiesLive.com Proxies-free.com New Proxy Lists Every Day Proxies123.com Best Quality USA Private Proxies