Programim dhe zhvillim, javascript, python, php, html

Si mund të ndaloj dhe të kapërcej një komandë pas 3.5 sekondash?

Dua të ndaloj dhe të kapërcej një komandë ndërsa është duke pritur për hyrje pas 3,5 sekondash. Jam përpjekur të përdor System.currentTimeMillis() duke zbritur nga koha e fillimit, megjithatë kodi që bëra nuk e anashkalon hyrjen.

ushqimi është një listë e grupeve nga klasa e tabelës.

public void timer() {
        startTime = System.currentTimeMillis(); 
        while(false||(System.currentTimeMillis()-startTime)<3500)
        {
            correct = input(); //What I want to skip after 3.5 seconds
        }
        record();
    }

Këtu është metoda input():

public boolean input() 
    {
        Scanner console = new Scanner (System.in);

        //I want to skip everything after this after 3.5 seconds.

        int num = console.nextInt(); 
        num--;
        System.out.println("You selected " + table.food.get(num).toString());
        table.food.remove(num);
        if (num==choice) 
        {
            return true;
        }
        return false;
    }
02.09.2019

  • Kodi që keni shkruar vazhdimisht kërkon të dhëna për 3,5 sekonda; kjo është ajo që dëshironi? 03.09.2019
  • Jo, dua që të ndalojë së kërkuari të dhëna dhe ta kapërcejë kodin pas 3,5 sekondash 03.09.2019
  • Një dublikatë e mundshme e si të lexohet nga mosbllokimi i hyrjes standarde? 03.09.2019

Përgjigjet:


1

Një nga problemet me të cilat po përballeni është se asnjë nga metodat nextScanner nuk mund të ndërpritet kur lexoni nga një tastierë. Prandaj ju duhet ta lexoni hyrjen në një mënyrë tjetër, për shembull duke përdorur një InputStreamReader.

Pas kësaj, ju mund të paraqisni një detyrë specifike në një ExecutorService që menaxhon ekzekutimin e "leximit të hyrjes" veçmas nga main Thread. Ju do të merrni një Future në të cilat ju mund të përcaktoni një afat kohor.

Vini re se ky operacion është ende i bllokuar (në të dy temat).

Kjo zgjidhje bazohet disi në këtë article.

import java.io.*;
import java.util.concurrent.*;

public class Test {
    static class ReadInput implements Callable<Integer> {

        public Integer call() throws IOException {

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            try {
                while (br.ready() == false) {
                    Thread.sleep(250);
                }

                String input = br.readLine();
                return Integer.parseInt(input);

            } catch (InterruptedException e) {
                return null;
            }
        }
    }

    public static void main(String[] args) {

        Integer input = null;
        ExecutorService ex = Executors.newSingleThreadExecutor();

        try {
            Future<Integer> future = ex.submit(new ReadInput());
            input = future.get(3500, TimeUnit.MILLISECONDS);

        } catch (ExecutionException | InterruptedException | TimeoutException e) {
            // handle exceptions that need to be handeled
        } finally {
            ex.shutdownNow();
        }

        System.out.println("done: " + input);
    }
}

Vini re se skadimi në ReadInput duhet të jetë më i ulët se koha në main Thread.

02.09.2019
  • Hej, e vlerësoj shumë përpjekjen që keni bërë për të më ndihmuar. Megjithatë, unë jam mjaft i ri (sapo kam filluar AP CS) dhe doja të kuptoja më tej se çfarë është dhe çfarë bën ky kod. 03.09.2019
  • Po, nuk kemi mësuar ende statike (që është e habitshme, e di). Pra, a bëj një klasë tjetër për të vendosur bllokun e parë të kodit apo e bëj atë nën të gjithë kodin tim? Dhe e fillova këtë projekt përpara se të mësoja Eclipse, kështu që është në bluJ, a do të funksionojë akoma? Dhe më falni që ju pyeta të gjitha këto, por a mund të shpjegoni se si funksionon kjo? 03.09.2019
  • static nuk është vërtet e rëndësishme në këtë rast (sapo e përdora atë pasi e krijova këtë si një inner class< /a> pranë metodës kryesore). Mos ngurroni të krijoni një public class (në skedarin e vet) në vend të kësaj. -- Unë kurrë nuk kam përdorur blueJ, por është thjesht kodi bazë java, që nuk lidhet vërtet me asnjë IDE. 03.09.2019
  • E vendosa nën klasën time dhe thotë se modifikuesi statik nuk lejohet këtu 03.09.2019
  • Unë kam shtuar një klasë kryesore (Test), tani thjesht mund ta kopjoni. 03.09.2019
  • lidhja E modifikova në këtë dhe kur kthen hyrjen pas skadimit të kohës, më jep një përjashtim të treguesit null, si a do ta rregulloja këtë? @sekond 03.09.2019
  • Numri i plotë është një objekt, që mund të jetë i pavlefshëm. unboxing në një int primitive shkakton NullPointerExcetpion, sepse një primitiv nuk mund të jetë i pavlefshëm. Shtoni një if (input == null) return -1 (ose ndonjë tregues tjetër që përdoruesi nuk ka futur asgjë) ose ndryshoni llojin e kthimit të metodës në Integer. 03.09.2019
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..