• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

java Zakończenie za pomocą klawiszu pętli

Object Storage Arubacloud
+2 głosów
472 wizyt
pytanie zadane 26 grudnia 2021 w Java przez michal441599 Użytkownik (530 p.)
edycja 26 grudnia 2021 przez michal441599

Witam mam pewien mały problem w którym się gubię chodzi o to żeby pętla zakończyła się za pomocą przycisku X i nie wiem zbytnio jak to zrobić

#EDIT1 Zrobłem aktualnie coś takiego dokładnie chodzi o to żeby za pomocą klawisza x lub X zatrzymać pętle za pomocą break

 

package com.company;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        int liczba = 0;
        while (true){
            System.out.println(liczba);
            liczba++;
            String x=getString();
            if(x.equals("x")){
                break;}
            else if(x.equals("X")){
                break;
            }
        }
    }
    public static String getString() {
        return new Scanner(System.in).next();
    }
}
komentarz 27 grudnia 2021 przez VBService Ekspert (253,120 p.)
edycja 27 grudnia 2021 przez VBService

Możesz zapis

if(x.equals("x")){
    break;}
else if(x.equals("X")){
    break;
}

skrócić do  wink

if(x.equals("x") || x.equals("X"))
   break;

lub

if(x.toLowerCase().equals("x"))
   break;

 

Jeżeli po if(...) jest tylko 1 linia kodu możesz pominąć klamry { }.

4 odpowiedzi

0 głosów
odpowiedź 26 grudnia 2021 przez Wiciorny Ekspert (269,710 p.)

Skorzystać ze wczytania wejścia najpierw - bo u Ciebie w kodzie nie ma nawet  funkcji która odczytuje od użytkownika coś...

Klasa skaner  obłuskuje podstawowe operacje wejścia : 
https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

Scanner keyboard = new Scanner(System.in);

Następnie z dostępnymi metodami pobrać znak od użytkownika i sprawdzić czy jest to znak x, pamiętając, że X to nie x, to znaczy wielkość liter ma znaczenie :) 

Pamiętaj że jest różnica między wczytaniem np. znaku typu Char- a  całej lini ;] można to na kilka sposbów zrobić z kilkoma metodami. 
Polecam poczytać, poćwiczyć i spokojnie napiszesz 
https://programistajava.pl/operacje-wejscia-i-wyjscia-w-javie/

! Wczytanie kolejnego wiersza danych nie zawsze będzie odpowiednie dla znaku :) 

komentarz 26 grudnia 2021 przez michal441599 Użytkownik (530 p.)

Aktualnie jestem przy takim czymś ale właśnie obstawiam że gdzie w ifie błąd popełniam

package com.company;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        int liczba=getInt();
        String x=getString();
        while (true){
            System.out.println(liczba);
            liczba++;
            if(x=="t")
                break;
        }
    }
    public static int getInt() {
        return new Scanner(System.in).nextInt();
    }
    public static String getString() {
        return new Scanner(System.in).next();
    }
}
komentarz 26 grudnia 2021 przez Wiciorny Ekspert (269,710 p.)
wczytujesz inta, chcesz x , porównujesz do 't'?
no nie bardzo rozumiem dlaczego tak kombinujesz. i generalnie czemu wrapujesz metody we własne
komentarz 26 grudnia 2021 przez michal441599 Użytkownik (530 p.)
Wczytuje inta żeby użytkownik podał liczbe i chce żeby za pomocą "t" zakończyło pętle
komentarz 26 grudnia 2021 przez Wiciorny Ekspert (269,710 p.)
no a jaką liczbe chcesz wczytać i dlaczego skoro wczytać chcesz liczbę, to ma kończyć się za pomocą t ?
komentarz 26 grudnia 2021 przez michal441599 Użytkownik (530 p.)
Ogólnie w tym co robię ma tworzyć pętle nieskończoną i się ma robić do momentu aż nie wcisne klawisza np t.To co aktualnie robie to jest troche na surowo i mówię się pogubiłem trochę :D
komentarz 26 grudnia 2021 przez Wiciorny Ekspert (269,710 p.)

spójrz na ten prosty przykład 

  final String test = Ins.next();
        if (test.equals("x")){
            System.out.println(true);
        }

 

komentarz 26 grudnia 2021 przez michal441599 Użytkownik (530 p.)
Rozumiem że dzięki temu kodowi po prostu jak naciśniesz x to koniec.Ja dopiero zaczynam przygodę z programowaniem :D Dlatego też pisze tak
0 głosów
odpowiedź 26 grudnia 2021 przez Chess Szeryf (76,710 p.)
if prompt#1 equal pressed_key 'x' or put 'x' then do stop while loop end if

Dodaj zdarzenie jak kliknięcie myszką lub określ zatwierdzenie "okienka" prompt wpisując OK.
0 głosów
odpowiedź 27 grudnia 2021 przez VBService Ekspert (253,120 p.)
edycja 27 grudnia 2021 przez VBService

Odnosząc się do Twojego kodu

package com.company;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        int liczba = 0;
        while (true){
            System.out.println(liczba);
            liczba++;
            String x=getString();
            if(x.equals("x")){
                break;}
            else if(x.equals("X")){
                break;
            }
        }
    }
    public static String getString() {
        return new Scanner(System.in).next();
    }
}

możesz zamiast 

new Scanner(System.in).next();

zapisać

new Scanner(System.in).nextLine();

wtedy po każdym wciśnięciu tylko Enter-a będzie następowało inkrementowanie wartości zmiennej liczba. W momencie naciśnięcia klawisza x i Enter - koniec wykonywania pętli.  wink

przykład  [ on-line ]

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int liczba = getInt();
        while (true) {
            System.out.print(++liczba);
            String x = getString();
            if (x.toLowerCase().equals("x"))
                break;
        }
    }
    public static int getInt() {
        return new Scanner(System.in).nextInt();
    }
    public static String getString() {
        return new Scanner(System.in).nextLine();
    }
}

komentarz 27 grudnia 2021 przez Wiciorny Ekspert (269,710 p.)
VEB przeczytaj regulamin, kolega sie uczy- nie dawaj mu gotowców, bo to go nic nie nauczy.
Zadanie bylo bardzo proste, ale takie danie gotowca nic mu nie pomoze bo nie zrozumie sam jak to napisać...
komentarz 27 grudnia 2021 przez VBService Ekspert (253,120 p.)
VEB ??

Przecież to nie jest gotowiec, to jest jego kod (OP-sa) z zaprezentowaną proponowaną zmianą.
–1 głos
odpowiedź 26 grudnia 2021 przez Oscar Nałogowiec (29,290 p.)
Musisz to zrobić w programie wielowątkowym - jeden czyta klawisze i jak jest odpowiedni to przerywa drugi wątek.
1
komentarz 26 grudnia 2021 przez Wiciorny Ekspert (269,710 p.)
nie musi, tu  wystarczy 1-2 funkcje ;]  i  10 linijek jak nie mniej. na 1 wątku głównym main

Podobne pytania

0 głosów
1 odpowiedź 289 wizyt
pytanie zadane 28 grudnia 2015 w JavaScript przez Radekoslaw123 Gaduła (3,080 p.)
0 głosów
2 odpowiedzi 2,074 wizyt
pytanie zadane 30 października 2020 w C i C++ przez forvev Początkujący (390 p.)
0 głosów
1 odpowiedź 360 wizyt

92,556 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...