Wątek przeniesiony 2018-07-26 22:58 z Java przez ŁF.

Aplikacja konsolowa – ponowienie prośby o podanie danych przez użytkownika

0

Witam Serdecznie,
od kilku dni uczę się programować w Javie, Chciałbym zapytać się kolegów z większym doświadczeniem jak spowodować aby po metodzie if konsola znowu odpytała użytkownika o ponowne podanie metrów lub przeniosła do początku programu:

Scanner sc  = new Scanner(System.in);

System.out.println("Witaj w kalkulatorze metrów na cm:");
System.out.println("");
System.out.println("Podaj liczbę metrów");

int meters = sc.nextInt();
int cm = meters * 100;

while  (meters < 0  ) {
    System.out.println("Podana wartość jest nieprawidłowa. Musisz podać liczbę większą od 0! ");

    break;
}

if (meters > 0) {
    System.out.println(meters +" metrów to " + cm + " centymetrów");
}

Byłbym wdzięczny za naprowadzenie ... :)

0

Wydaje mi się, że to co chcesz zrobić jest nie tyle złe, co brzydkie. Po pierwsze to staraj się nie używać break czy continue bo w takim przypadkach to brzydka droga na skróty.

        while (meters < 0) {
            System.out.println("Podana wartość jest nieprawidłowa. Musisz podać liczbę większą od 0! ");
            meters = sc.nextInt();
            cm = meters * 100;
        }
        System.out.println(meters + " metrów to " + cm + " centymetrów");

W ten sposób odpytujesz użytkownika aż do uzyskania poprawnej wartości.
Teraz wystarczy, że wszystko opakujesz czy to w pętle nieskończoną while(true) czy z jakimś warunkiem wyjścia.

0
print("Witaj w kalkulatorze metrów na cm:\n")
ask_again = True
while(ask_again):
  meters = int(input("Podaj liczbę metrów"))
  cm = meters * 100;
  if meters < 0:
    print("Podana wartość jest nieprawidłowa. Musisz podać liczbę większą od 0! ")
  else:
    print(str(meters) +" metrów to " + str(cm) + " centymetrów")
    ask_again = False

Przetłumaczenie powyższego na Javę pozostawiam autorowi tematu.

A na dokładkę rekurencyjnie:

def meters_to_centimeters():
  meters = int(input("Podaj metry"))
  if meters > 0:
    print (meters, " metrów to ", meters * 100, " centymetrów")
  else:
    meters_to_centimeters()
0
Drevlov napisał(a):

Chciałbym zapytać się kolegów z większym doświadczeniem jak spowodować aby po metodzie if konsola znowu odpytała użytkownika o ponowne podanie metrów lub przeniosła do początku programu

Słyszałeś o pętlach?

Scanner sc  = new Scanner(System.in);
Boolean menu = true;
for(;menu;) {
    System.out.println("jestes w menu");  
    System.out.println("z - znudzilo mi sie");
    menu = !sc.nextLine().equals("z");
}
0
Haskell napisał(a):
Drevlov napisał(a):

Chciałbym zapytać się kolegów z większym doświadczeniem jak spowodować aby po metodzie if konsola znowu odpytała użytkownika o ponowne podanie metrów lub przeniosła do początku programu

Słyszałeś o pętlach?

Dopiero przerabiam nie wiedziałem jak je zastosować tutaj. Szczerze trochę wybiegłem z problemem do przodu - całość pętli jeszcze przede mną.

Dziękuję wszystkim za pomoc !

Rozwiązanie mojego problemu wklejam poniżej :)


public class conv {
    public static void main(String[] args) {
        Scanner sc  = new Scanner(System.in);
        Boolean menu = true;
        for(;menu;) {
            System.out.println("\nWitaj w kalkulatorze metrów na cm!\n");
            System.out.println("Podaj metry do przeliczenia na cm:\n");

            float meters = sc.nextFloat();

            float cm = meters * 100;

            System.out.println("Podałeś liczbę: "+ meters + " To jest : " + cm + " cm");


            System.out.println("Jeśli chcesz zakończyć program wciśnij - [Z]");
            menu = !sc.nextLine().equals("z");
        }
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1