Is it possible to do something with java scanner to make it shorter?

I am solving a puzzle at codingame.com and I have to write a code that has at most 200 characters, now it has 772 counting tabs. Is it possible to do something with an input scanner so it takes less characters? The condition alone makes like 180 and don’t worry about how a code looks like it’s just to make it short as possible.

import java.util.*;
class Player {public static void main(String args()){
    Scanner s=new Scanner(System.in);
    s.nextInt();s.nextInt();s.nextInt();
    int eF=s.nextInt(),eP=s.nextInt();
    s.nextInt();s.nextInt();
    int nb=s.nextInt();
    int f()=new int(nb);
    for (int i=0;i<nb;i++) {
        int ef=s.nextInt(),el=s.nextInt();
        f(ef)=el;
    }
    while(true){
        int cF=Math.abs(s.nextInt()),cP=s.nextInt();
        String d=s.next();
        if(((cF==eF&&eP<cP||nb>0&&cF!=eF&&f(cF)<cP)&&d.equals("RIGHT")
        ||(cF==eF&&eP>cP||nb>0&&cF!=eF&&f(cF)>cP)&&d.equals("LEFT")))
            System.out.println("BLOCK");
        else
            System.out.println("WAIT");}}}

s.nextInt();s.nextInt();s.nextInt(); is for getting an input from Scanner because I have to read all given variables eventhough I am not using them so the program works properly. For those who need to know what puzzle it is – https://codingame.com/multiplayer/codegolf/don’t-panic The goal is to write as short code as possible even if it means that a code is unreadable. I am always trying to keep my code clean and readable but for this purpose it has to be as it is. So I am looking for tips that i can learn.

Mostly, I need to compress s.nextInt(); if it’s possible.

java – How to design a system of user contests with each contest setting a deadline and running independently in a separate thread?

I need to build a small web app (Servlets, JSP, JDBC) that basically conducts contests among users and stores results in the database. There are multiple HTTP requests from users and multiple contests. Each time one of the users would like to start a contest, a new thread comes to ContestManager, which has a collection that holds current Contest instances. Contest is a separate class which contains a collection which stores all User entities (candidates, wishing to participate in that particular contest). One User may participate in multiple contests. A Contest instance is created as soon as the first User calls the create method of the ContestManager. Upon creation the Contest instance must set a timer during which other user threads may find that Contest, and add or remove themselves from that Contest. When the timer finishes, the Contest instance must call select method which holds the selection logic, choose a winning user, and make corresponding updates to the database. After that the Contest object must remove itself from the collection of contests.

I was thinking about making two classes: a ContestManager which gets called by user threads, and which contains ConcurrentHashMap to hold contest ids and Contest instances, and a ‘Contest’ which contains an ArrayDeque of candidates, participating in that contest. The ‘Contest’ class implements Runnable and its run method starts as soon as that Contest instance is created. Inside the run method there is a Thread.sleep(...) call to emulate a timer, followed by the select method, which does selection logic and updates database, followed by cleanup method for the ‘Contest’ to delete itself from the map

public class ContestManager {

    private static final Map<Integer, Contest> allContests = new ConcurrentHashMap<>();
    ...

    public void startNewContest(User user) {
        if (!allContests.containsKey() {
            allContests.put(generateContestId(), new Contest(user));
        }
    }

    ...
}


public class Contest implements Runnable {
    private final Queue<User> candidates = new ArrayDeque<>();

    public Contest(User user) {
        candidates.offer(user);
        new Thread(this).start();
    }

    @Override
    public void run() {
        try { 
            Thread.sleep(300 * 1000); // 5 min
          
            selectWinner();
            updateDatabase();
            removeContest();
        } catch (InterruptedException e) {
            ...
        }
    }
}

Please advise if that logic is acceptable, or is there a better solution to the system.

java – Como faço para pegar um valor Long num EditText e inserir no Firebase?(Android Studio)

Preciso pegar um valor tipo Long e inserir no Firebase e depois mostra-lo numa ListView. Criei uma classe Pessoa e com os outros atributos consegui inserir e mostrar numa boa. Somente o atributo Long não consigo, dá erro. Estou recebendo os valores pelo Plain Text(EditText)
Minha classe Pessoa está assim:

`public class Pessoa {
private String latitude,longitude;
private String uid;
private String cnpj;
private String razao;
private Long  codigo;

public Pessoa() {
}...



public Long getCodigo() {

    return codigo;
}

public void setCodigo(Long codigo) {
    this.codigo = codigo;
}

@Override
public String toString() {
    return
            "Código Cliente:" +codigo +"n"+
            "CNPJ:" +cnpj +"n"+
            "Razão Social:" +razao +"n"+
            "Latitude:" +latitude +"n"+
            "Longitude:" +longitude +"n"

    ;
}

}
`
Aqui está minha MainActivity, podem ver que tento pegar o id do Long e colocar no Firebase e o erro já aparece na linha onde insiro o Long:

O codigo segue para retornar numa ListView mas não é necessario mostrar o restante, o mesmo erro já está presente nessa parte do codigo

public class MainActivity2 extends AppCompatActivity {
private EditText cnpj1,razao1, latitude1, longitude1,codigo1;
private ListView list;
private Button botao2;
private DatabaseReference referencia = FirebaseDatabase.getInstance().getReference();

private List<Pessoa> listPessoa = new ArrayList<Pessoa>();
private ArrayAdapter<Pessoa> arrayAdapterPessoa;
Pessoa pessoaSelecionada;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    codigo1 = findViewById(R.id.CodigoCliente);
    cnpj1 = findViewById(R.id.CnpjCliente);
    razao1 = findViewById(R.id.RazaoCliente);
    latitude1 = findViewById(R.id.LatitudeCliente);
    longitude1 = findViewById(R.id.LongitutudeCliente);
    botao2 = findViewById(R.id.buttonCliente);
    list = findViewById(R.id.ListaCliente);


    botao2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Pessoa p = new Pessoa();
            p.setUid(UUID.randomUUID().toString());

            p.setCnpj(cnpj1.getText().toString());
            p.setRazao(razao1.getText().toString());
            p.setLatitude(latitude1.getText().toString());
            p.setLongitude(longitude1.getText().toString()); 
            p.setCodigo(codigo1.getText().toString());     // Aqui dá o erro, esse é o Long




            referencia.child("Cliente").child(p.getUid()).setValue(p);











        }
    });

vscode – Java: “illegal start of expression” en Jupyter Notebook con VS Code

Al hacer “Hola Mundo” en Java retorna el error “illegal start of expression” después de package. Uso Jupyter Notebook con el kernel de java en la versión Code-Insiders de VS Code.

Si comento la línea de package, aparece que está bien pero no imprime nada. Aclaro que esto solo me pasa en el Jupyter notebook dentro de VS Code, pues al correr el mismo código en un archivo Hola_Mundo.java en VS Code lo corre sin problemas. A prueba y error tuve que comentar el paquete, la clase y el main para que imprimiera en notebook, pero no se a qué se debe esto y si tendré que hacerlo siempre o es un error del notebook.

Aquí dejo el código. Les agradezco su ayuda y pido de antemano disculpas si es una pregunta elemental, pero soy nuevo en desarrollo y no he encontrado la solución en los hilos con el mismo error.

package semana1;

public class Hola_Mundo {
    public static void main(String() args) {
        System.out.println("Hola, Mundo!");
    }
}
|   package semana1;
illegal start of expression

java – ¿Que diferencia hay al momento de definir de estas 2 maneras un arreglo que debe contener objetos?

eh corrido el programa con estas 2 formas diferentes y obtengo el mismo resultado (Se obtiene el resultado deseado), el arreglo debe contener objetos de tipo Vehiculo, mi duda es, si definirlos de estas dos maneras esta bien o que diferencia hay, la diferencia esta en que en la forma 1ra pongo “()” luego de tipo de datos que almacenara el array que en este caso es “Vechiculo” y la 2da forma los “()” los coloco despues del nombre del array

Vehiculo ArrayVehiculos()=new Vehiculo(Numero);

Vehiculo() ArrayVehiculos=new Vehiculo(Numero)

java – I Need to Mock a Database in Springboot, with Tables, Schemas, and Stored Procedures

I have a Spring application that interfaces with a database (specifically, a MariaDB database). In the database are several schemas, with a handful of tables and stored procedures in each.

In the application, our repository classes create new records by using stored procedures.
For instance:

@Transactional
@Procedure(procedureName="EXAMPLE.STORED_PROC_1")
public void create(String foo, String bar);

In order to test a new feature, we need to be able to run this stored procedure and verify that the
data is correctly inserted. We don’t want to have to connect to the database every time, so we figured it would be easier to simply use an in memory database so that we can run the test anywhere.

Problem is, I haven’t seen any examples with stored procedures. Is there a way to use an in-memory database that mimics the structure of our live system, with the same schemas, tables, and stored procedures?

Ejecutar avgdude.exe desde Java usando Runtime y ProcessBuilder

Saludos cordiales a todos soy nuevo en la comunidad

Actualmente estoy desarrollando una IDE en java, la cual permitirá realizar grabación de los Chip atmega328 y otros, y estoy implementado una interface grafica para el software avrdude y avr-gcc, estoy intentando simplemente ejecutar la instrucción avrdude.exe con Runtime y ProcessBuilder y con las 2 no se me muestra la ejecución de avrdude.exe, a pesar de que estoy usando InputStream. Cuando lo ejecuto me da como salida lo siguiente:

Exited with error code : 0

Y este es el codigo:

ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("C:/Program Files (x86)/Arduino/tools/bin/avrdude.exe");
try {
Process process = processBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
String texto1="";
while ((line = reader.readLine()) != null) {
Camp_Text.setText(line);
texto1+=line+"n";


}
Camp_Text.setText(texto1);
int exitCode = process.waitFor();
System.out.println("n Exited with error code : " + exitCode);


} catch (InterruptedException ex) {
System.out.println(ex);
Camp_Text.setText("Error");
System.exit(0);
} catch (IOException ex) {
Logger.getLogger(Solo_Pruebas1.class.getName()).lo g(Level.SEVERE, null, ex);
Camp_Text.setText("Error");
System.exit(0);
}


esta es la otra que he realizado

try
{
Runtime rt = Runtime.getRuntime();
String cmdString = "C:/Program Files (x86)/Arduino/tools/bin/avrdude.exe";


System.out.println(cmdString);
Process pr = rt.exec(cmdString);


BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));


String line = null;


while ((line = input.readLine()) != null)
{
System.out.println(line);
}


int exitVal = pr.waitFor();
System.out.println("Exited with error code " + exitVal);


}
catch (Exception e)
{
System.out.println(e.toString());
e.printStackTrace();
}
  

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)?

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.

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.