WebHU - Programozási kérdések és válaszok

Java-on bizonyos mértékkel csökkenteni

Olyan programot próbálok létrehozni, ahol a felhasználó által beírt szám egy bizonyos mértékben csökkenne. valami ilyesmi tetszene:

Update by (Increment/Decrement):decrement
Enter starting number:15
Enter update number:3
Enter end number:3
loop#1  value=15
loop#2  value=12

a végszám az, ahol a ciklus megáll, a frissítési szám pedig az, hogy a kezdő szám mennyivel csökkenjen. eddig ez a kódom, és elakadtam azon, hogyan tartsam a ciklust a végszámig.

package jaba;
import java.util.Scanner;


public class loop {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    Scanner input = new Scanner(System.in);

    System.out.print("Update by (Increment/Decrement):");
    String Decrement = scan.nextLine();
    
    System.out.print("Enter starting number:");
    String number = scan.nextLine();
    
    System.out.print("Enter update number:");
    String upnumber = scan.nextLine();
    
    System.out.print("Enter end number:");
    String endnumber = scan.nextLine();
    
    
    
    int i,j;
    
    i = 15;
    j = 1;
    
    do {
        
        System.out.println("loop#" +j+ "\tvalue="+i);
        j++;
        
        
        
        }while(i<15);
            
        i = i-3;
        
        System.out.println("loop#" +j+ "\tvalue="+i);
        };
        
        
}

  • Tipp: a do/while ciklusnak van egy befejezési feltétele, amely a i-tól függ, de a ciklus törzse nem változik i... tehát vagy pontosan egyszer fog végrehajtani, vagy örökké. 23.02.2021

Válaszok:


1

mit szólnál valami ehhez hasonlóhoz:

public class loop {

    public enum Operation {INCREMENT, DECREMENT, INVALID}

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("Update by (Increment/Decrement):");
        String operationString = scan.nextLine();

        System.out.print("Enter starting number:");
        String numberString = scan.nextLine();

        System.out.print("Enter update number:");
        String upnumberString = scan.nextLine();

        System.out.print("Enter end number:");
        String endnumberString = scan.nextLine();

        // Determine and parse stuff
        int startNumber = Integer.parseInt(numberString);
        int updateNumber = Integer.parseInt(upnumberString);
        int endNumber = Integer.parseInt(endnumberString);
        // Parse operation, but assume invalid operation
        Operation operation = Operation.INVALID;
        if (operationString.equalsIgnoreCase("increment")) {
            operation = Operation.INCREMENT;
        } else if (operationString.equalsIgnoreCase("decrement")) {
            operation = Operation.DECREMENT;
        }

        // now do the "meat" of the assignment
        int loopNumber = 0; // we'll keep the loop number as a separate counter
        switch (operation) {
            case INCREMENT:
                for (int i = startNumber; i < endNumber; i = i + updateNumber) {
                    loopNumber++;
                    performAssignmentPrinting(loopNumber, i);
                }
                break;

            case DECREMENT:
                for (int i = startNumber; i > endNumber; i = i - updateNumber) {
                    loopNumber++;
                    performAssignmentPrinting(loopNumber, i)
                }
                break;

            case INVALID:
            default:
                throw new IllegalStateException("Please enter supported operation! (increment/decrement)");
        }
    }

    private static void performAssignmentPrinting(int loopNumber, int value) {
        System.out.println("loop#" + loopNumber + "\tvalue=" + value);
    }
}

vagy a do/while verzió:

        // now do the "meat" of the assignment
        int currentNumber = startNumber;
        int loopNumber = 0; // we'll keep the loop number as a separate counter

        do {
            loopNumber++;
            switch (operation) {
                case INCREMENT:
                    currentNumber += updateNumber;
                    performAssignmentPrinting(loopNumber, currentNumber);
                    break;

                case DECREMENT:
                    currentNumber -= updateNumber;
                    performAssignmentPrinting(loopNumber, currentNumber);
                    break;

                case INVALID:
                default:
                    throw new IllegalStateException("Please enter supported operation! (increment/decrement)");
            }

        } while (currentNumber != endNumber);

23.02.2021
  • bár tudom, hogy ez iskolai feladat, vegye figyelembe a következő bevitelt: startNumber = 1000, endNumber = -1000, updateNumber = 100, és nézze meg, mi történik, ha beírja az INCREMENT és a DECREMENT értéket. Figyelje meg a különbséget a hurkok számában, amikor növeli. Valahol 21474846 körül kell lennie, ha nem tévedek. CC @coderx 23.02.2021
  • Lehetséges, hogy ez a megoldás a fentebb leírt bemenetre sem működik, mivel azt feltételezi, hogy növelés esetén a kezdőszám kisebb lesz, mint a végszám, és fordítva a csökkentésnél. 23.02.2021
  • @coderx hozzáadta a do/while verziót is, aminek működnie kell az első megjegyzésemben említett ellenpéldánál. 23.02.2021
  • Szia! köszönöm szépen a további információkat és a forráskódot :) a forráskód valóban segített megérteni a feladat logikáját és koncepcióját! mégegyszer nagyon köszönöm! 23.02.2021
  • @coderx a bónuszpontokért, adjon hozzá egy beviteli ellenőrzést, hogy figyelmeztesse a felhasználót, ha beírja a 0 értéket a frissítési számhoz, és még egyszer kéri a bevitelt. 24.02.2021

  • 2

    i = i-3; cikluson kívül van. Az i dekrementációjának áthelyezése a ciklusba:

        do {
            System.out.println("loop#" + j + "\tvalue=" + i);
            j++;
            i = i - 3;
        } while (i > endnumber);
    
    24.02.2021

    3

    A for loop a megoldás a programodhoz. for(a ; b ; c) {...}
    A for ciklus működése a Google-on. És próbáld megérteni, hogyan működik a 3 rész a,b,c.

    Ál:

    // if decrease mode
        // for (i = upperbound ; i >= lowerbound ; i-= decrement)
            // print i
    
    // if increase mode
        // for (i = lowerbound ; i <= upperbound ; i+= increment)
            // print i
    

    Frissítés: Ez elegendő ahhoz, hogy elinduljon, és további ellenőrzéseket adjon az utazáshoz.

    23.02.2021
    Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..