Programim dhe zhvillim, javascript, python, php, html

Mblidhni një grup nga përdoruesi, printoni numrin më të vogël, numrin më të madh, llogaritni mesataren dhe mesataren

Unë jam duke ecur mirë në këtë program, por ndërsa kam përparuar, me sa duket kam bërë disa gabime logjike që janë të vështira për t'u gjetur dhe kanë nevojë për ndihmë. Unë kam metoda që renditin grupin nga më i vogli tek më i madhi. Sa herë që printoj numrin më të vogël në ekran, ai gjithmonë e tregon atë numër si 0 edhe nëse nuk kam shtypur asnjë zero. Mund të marr numrin më të lartë të saktë, përveç rastit kur përdoruesi fut sasinë maksimale të numrave, atëherë ai printon numrin e dytë më të lartë. Ndonjëherë marr rezultatin e saktë për mesataren, por kurrë nuk marr rezultatin e saktë për mesataren. Çdo ndihmë vlerësohet shumë! Ndjehem sikur jam afër kodit të saktë, por këto gabime po më bëjnë një kohë të vështirë.

public static Scanner kbd = new Scanner(System.in);

public static void main(String[] args) {

    //change to 100 when done testing
    final int MAXSIZE = 10;
    int[] nums = new int [MAXSIZE];
    int usedSize, indexOfNextSmallest = 0;
    double median, average;

    System.out.println("Please enter each number starting from least to greatest(a negative number will quit input): ");
    usedSize = getNums(nums);

    for (int index = 0; index < nums.length -1; index++) {
        indexOfNextSmallest = getIndexOfSmallest(index, nums);
        interchange(index, indexOfNextSmallest, nums);
    }

    median = medians(nums);
    average = averages(nums);

    System.out.println("The smallest number entered is " + nums[0] + ".");
    System.out.println("The largest number entered is " + nums[nums.length-1] + ".");
    System.out.println("The median is: " + median);
    System.out.println("The average is: " + average);

}

public static int getIndexOfSmallest(int startIndex, int[] nums) {
    int min = nums[startIndex];
    int indexOfMin = startIndex;
    for (int index = startIndex +1; index < nums.length; index++) {
        if (nums[index] < min) {
            min = nums[index];
            indexOfMin = index;
        }
    }
    return indexOfMin;
}

private static void interchange(int index, int indexOfNextSmallest, int[] nums) {
    int temp = nums[index];
    nums[index] = nums [indexOfNextSmallest];
    nums[indexOfNextSmallest] = temp;
}

public static int getNums(int nums[]) {
    int usedSize = 0, userValue = 0;

    while(userValue >= 0 && usedSize < nums.length) {
        nums[usedSize] = userValue;
        userValue = kbd.nextInt();
        usedSize++;
    }
    if(!(userValue >= 0)) {
        --usedSize;
        System.out.println(usedSize + " numbers entered.");
    }
    else if(!(usedSize < nums.length)) {
        System.out.println("Maximum amount of inputs (" + nums.length + ") reached.");
    }

    return usedSize;
}

public static double medians(int nums[]) {
    double median;
    if (nums.length % 2 == 0)
        median = ((double)nums[nums.length / 2] + (double)nums[nums.length / 2 - 1]) / 2;
    else
        median = (double)nums[nums.length / 2];

    return median;

}

public static double averages(int nums[]) {
    double average;
    int sum = 0;
    for (int index = 0; index < nums.length; index++){
        sum = sum + nums[index];
    }
    average = ((double)sum / (double)nums.length);

    return average;
}

} Ky është dalja që marr nëse fut 1, 2, 3, 4, 5, -7 (negativi është ndalimi i hyrjes së përdoruesit (mund të jetë problem?))

Please enter each number starting from least to greatest(a negative number will quit input):
1 2 3 4 5 -7
5 numbers entered.
The smallest number entered is 0.
The largest number entered is 5.
The median is: 0.5
The average is: 1.5

Përgjigjet që duhet të marr me kodin e saktë janë 1, 5, 3.0 dhe 3.0

Faleminderit përsëri për çdo ndihmë.


  • Arsyeja pse averages() po dështon është sepse grupi nums po ndryshohet diku tjetër në kod. 19.11.2015
  • a do të ishte i njëjti rast për median()? 19.11.2015
  • Ky do të ishte supozimi im (megjithatë nuk e kam testuar medians()). 19.11.2015
  • Ne rregull. Pra, metoda getNums() është ajo ku po bëj që përdoruesi të fusë numrat për grupin...ku tjetër mund të ndryshohet grupi? 19.11.2015
  • Unë mendoj se ka një shans që mund të ndryshohet në një nga metodat e renditjes së grupit. 19.11.2015

Përgjigjet:


1

E gjithë gjëja shkon keq në dy vende:

I pari

    final int MAXSIZE = 10;
    int[] nums = new int [MAXSIZE];

Kjo do të thotë se edhe pse programi nuk pranoi vlera pas një vlere negative; e gjithë pjesa tjetër e grupit është e mbushur me 0.

Për ta zgjidhur këtë, mund të zgjidhni të përdorni ArrrayList në vend të kësaj në grupin int.

Çështja e dytë

Kodi ekzistues për getnums është

public static int getNums(int nums[]) {
    int usedSize = 0, userValue = 0;

    while(userValue >= 0 && usedSize < nums.length) {           
        nums[usedSize] = userValue;
        userValue = kbd.nextInt();          
        usedSize++;
    }
    if(!(userValue >= 0)) {
        --usedSize;
        System.out.println(usedSize + " numbers entered.");
    }
    else if(!(usedSize < nums.length)) {
        System.out.println("Maximum amount of inputs (" + nums.length + ") reached.");
    }

    return usedSize;
}

Këtu në ciklin while, deklaratat

        nums[usedSize] = userValue;
        userValue = kbd.nextInt();

do të sigurojë që vlera në num[0] do të jetë gjithmonë zero (pasi userValue është inicializuar në 0) dhe nuk do të merret nga hyrja e përdoruesit.

Në vend të kësaj duhet të jetë:

while(userValue >= 0 && usedSize < nums.length) {           
        userValue = kbd.nextInt();
        nums[usedSize] = userValue;
        usedSize++;
 }

Nëse kujdeseni për këto dy çështje; atëherë pjesa tjetër e kodit duhet të funksionojë mirë.


Kjo është ajo që marr kur ekzekutoj programin pasi e përditësoj atë për numrin e dytë:

Input

Please enter each number starting from least to greatest(a negative number will quit input): 
5
8
4
32
-5

Prodhimi

The smallest number entered is -5.
The largest number entered is 32.
The median is: 0.0
The average is: 4.4

Cila është e saktë sepse mesatarja dhe mediana llogariten për 10 numra dhe pjesa tjetër e numrave (pas futjes së numrit negativ) janë vetëm 0


Përditëso sipas komenteve

Nëse thjesht dëshironi të refuzoni numrin negativ, mund të përditësoni ciklin while në metodën getnums si:

    while(userValue >= 0 && usedSize < nums.length) {           
        userValue = kbd.nextInt();
        if(userValue >= 0) {
            nums[usedSize] = userValue;
            usedSize++;
        }
    }

Gjithashtu, cikli if pas kësaj nuk duhet të ulë vlerën e usedSize

if(!(userValue >= 0)) {        
        System.out.println(usedSize + " numbers entered.");
    }
19.11.2015
  • Ok e kuptoj cfare po thua. E bëra ndryshimin në pjesën e dytë, por tani po më thotë se numri im më i ulët është numri - që futa për të ndaluar hyrjen. Që ka kuptim. Por si mund ta marr kodin për të hequr qafe negativin në grup? Sepse gjithçka për të cilën më duhet negativi është të largohem nga hyrja e përdoruesit. & për konstanten...a duhet të zhvendoset në metodën getNums dhe në vend të kësaj të ketë gjatësinë e vargut të caktuar në nums[nums.length]? 19.11.2015
  • Ok, mirë. Pra, kur të kuptoj se çfarë të bëj me konstanten, ajo duhet të funksionojë pa probleme? 19.11.2015
  • @T3rm3nator Kontrolloni përgjigjen e përditësuar për trajtimin e numrit negativ, si dhe për të printuar vlerat e sakta për numrat total të futur 19.11.2015
  • Faleminderit shumë për ndihmën tuaj. Unë jam ende duke u përpjekur të praktikoj për ta bërë kodin tim më efikas dhe ju më keni ndihmuar të shoh se çfarë duhet të kisha bërë ndryshe. Sidoqoftë, numrat negativë nuk përfshihen në metodat min ose max, por ende ndikojnë në mesataren dhe mesataren. 19.11.2015
  • @T3rm3nator Hidhini një sy përgjigjes së përditësuar për numrat negativë. Tani ato nuk duhet të përfshihen në asnjë nga metodat 19.11.2015
  • Nuk do të mendoja se do të ishin, por nëse fut një hyrje të tillë si 23, 5, 68, 2, -5. Përgjigjet që marr janë: 4 numra janë futur (djathtas) numri më i vogël është 0 (gabim; duhet të jetë 2) numri më i madh është 68 (e drejtë) mesatarja është 0.0 (gabim; duhet të jetë 14) dhe mesatarja është 9.8 (gabim; duhet të jetë 24.5 ) 19.11.2015
  • @T3rm3nator Po i merrni ato numra sepse problemi 1 ekziston ende. Pra, ju keni 4 numra (23,5,68,2 -- duke injoruar negativin) dhe 6 zero. Në këtë rast, minimumi do të jetë 0 (kujtoni 6 zero), më i madhi është 68, mesatarja do të jetë 0.0 (që është ajo që keni -- drejtë) dhe mesatarja do të jetë 9.8. Për të marrë përgjigjet tuaja, do t'ju duhet ose të injoroni zero në kodin tuaj ose t'i hiqni ato nga grupi. Por çfarë do të ndodhë nëse përdoruesi në të vërtetë fut 0? Ju duhet të merrni parasysh të gjitha këto skenarë 19.11.2015
  • Le të të vazhdojmë këtë diskutim në chat. 19.11.2015

  • 2

    Metodat tuaja medians() dhe averages() duken mirë. Unë do të rekomandoja që të hiqni qafe metodat getIndexOfSmallest() dhe interchange(). Ju duhen vetëm këto metoda në dukje sepse po përpiqeni t'i renditni. Por unë besoj se lloji është në vend të ndryshimit të grupit. Përdorni metodën e mëposhtme për të gjetur vlerën minimale:

    public int getMin(int[] nums) {
        int min = nums[0];
    
        for (int i=1; i < nums.length; ++i) {
            if (nums[i] < min) {
                min = nums[i];
            }
        }
    
        return min;
    }
    

    Do ta lë si detyrë shtëpie që të kodoni një metodë për të gjetur vlerën maksimale.

    19.11.2015
  • Ne rregull faleminderit. Dëshironi të shikoni përgjigjen nën këtë? Ndjej se nëse kombinoj dy përgjigjet do të marr minimumin dhe maksimumin e saktë duke zgjidhur problemin që më jep përgjigja më poshtë. 19.11.2015
  • Ju nuk keni nevojë të renditni grupin e hyrjes për të marrë min dhe max. Thjesht lexoni hyrjen dhe më pas telefononi getMin(), getMax(), medians() dhe averages(). 19.11.2015
  • Megjithatë, kur testova programin tim, hasa një problem. Unë ende marr 0 si numrin më të vogël edhe nëse nuk fut zero. Ndonjë ide se si mund ta rregulloj këtë. Po sikur numri min të ishte për shembull 3? 19.11.2015
  • Na vjen keq që kishte një gabim në kodin tim. U përgjigja duke përdorur një celular dhe vetëm tani jam para kompjuterit tim. Ju duhet të kaloni vetëm në një grup që ka të paktën një element. 19.11.2015
  • Ti je i mirë. Unë jam duke bërë atë që thatë, por min është gjithmonë 0, përveç nëse fut sasinë maksimale të numrave për grupin. Unë kam të njëjtin kod që keni shkruar, por prapë marr 0. Jam i humbur se pse kjo ndodh sepse duhet të funksionojë siç duhet. 19.11.2015
  • Kjo ndoshta po ndodh sepse keni lojëra elektronike boshe në grup, të cilat parazgjedhura kanë një vlerë prej 0. Kjo është ajo që pashë në kodin tim të testimit, derisa u sigurova që grupi vetëm përmban të dhëna reale. Kontrolloni grupin në korrigjuesin dhe duhet të shihni që kjo ndodh. 19.11.2015
  • Hm, në rregull. Kjo për shkak të MAXSIZE konstante që i jep sloteve boshe 0 po hamendësoj? 19.11.2015
  • Nëse rregulloj problemin e parë për të cilin më tha Balwinder, kjo duhet ta rregullojë problemin, apo jo? Unë thjesht jam pak i humbur në mënyrën se si mund ta bëj këtë. 19.11.2015
  • Le të të vazhdojmë këtë diskutim në chat. 19.11.2015
  • 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ë,..