jak wprowadzic alternatywny scenariusz do scannera

0
Scanner wprowadz = new Scanner(System.in);
System.out.println("Podaj druga liczbe");
b = wprowadz.nextDouble();            

/*jak zrobic alternatywny scenariusz, w ktorym wprowadzona wartosc nie bedzie double'm i ktory zamiast wyswietlac bledu pokaze nam 
System.out.println("Nie wprowadziłeś poprawnej wartości , wprowadź liczbę"); ?

1

W sumie to można także użyć wyjątku InputMismatchExeption. Ale nie gwarantuje, że to jest rozwiązanie optymalne.

                double input =0;
                Scanner scan = new Scanner(System.in);

                while(true) {
                        try {
                               input= scan.nextDouble();
                               break;

                        } catch( InputMismatchException e){
                                System.out.println(     "Nie wprowadziłeś poprawnej wartości , wprowadź liczbę");
                                scan.next();

                        }
                }
3

@theED: użycie hasNextXXX jak sugerował @szweszwe, ale w sensowny sposób:


class MyScaner{
   private InvalidInputHandler iih;
   private Scanner scanner;
   
   public MyScaner(InvalidInputHandler iih, InputStream in){
         this.iih = iih;
         this.scanner = new Scanner(in); 
   }

  public Either<String, Double> next(){
      if(scanner.hasNextDouble()) return Either.right(scanner.nextDouble());
      return iih.handle(scanner::next)
  }
}

//
class InvalidInputHandler{
    public Either<String, Double> handle(Supplier<Double> operation){
         Try.of(operation::get).toEither();
   }
}

Obsługę błędu delegujesz do InvalidInputHandler i niech tam będzie czy to prosty try/catch czy tak jak wyżej użycie Vavr.

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