Wprowadznie wartości wiekszj od zera. StreamTokenizer

0

Witam, mam problem z takim oto przykładem. nie wiem gdzie i co dopisać żeby można było podawać tylko wartości większe od zera (podajemy długości boków trójkąta).
Za wszelką pomoc z góry dziękuję.

import java.io.*;
public class MainNajwieksza {


        
        
        public static void main(String args[])
        {
                
        StreamTokenizer strTok= new StreamTokenizer(
                        new BufferedReader(
                                        new InputStreamReader(System.in)));
        System.out.print("Wprowadź pierwszą liczbę: ");
        try
        {
                while(strTok.nextToken()!=StreamTokenizer.TT_NUMBER)
                {
                        System.out.println("To nie jest liczba, wpisz jeszcze raz");
                }
        }catch(IOException e){
                System.out.print("Błąd"+e);
                return;
        }
        
        
        double a=strTok.nval;
        
        
        System.out.print("Wprowadź drugą liczbę: \n");
        try
        {
                while(strTok.nextToken()!=StreamTokenizer.TT_NUMBER)
                {
                        System.out.println("To nie jest liczba, wpisz jeszcze raz");
                }
        }catch(IOException e){
                System.out.print("Błąd"+e);
                return;
        }
        double b=strTok.nval;
        
        System.out.println("Wprowadź trzecią liczbę: ");
        try
        {
                while(strTok.nextToken()!=StreamTokenizer.TT_NUMBER)
                {
                        System.out.println("To nie jest liczba, wpisz jeszcze raz");
                }
        }catch(IOException e){
                System.out.print("Błąd"+e);
                return;
        }
        double c=strTok.nval;
                        
                Najwieksza naj=new Najwieksza(a, b, c);
                System.out.println(naj.sort());
                System.out.println("Prostokątny: "+naj.prosto());
                
        }
                
        
}
0
while(strTok.nextToken()!=StreamTokenizer.TT_NUMBER)
                {
                        System.out.println("To nie jest liczba, wpisz jeszcze raz");
                }

Po tym powinieneś sprawdzić, czy liczba jest dodatnia. Czyli:

double a=strTok.nval;
if(a<=0){
    //Mamy problem
}
0

Dzięki, ale czy wtedy będzie można wprowadzić wartość jeszcze raz? Chyba nie. Czy dało by się tak zrobić żeby można było powtórzyć wprowadzanie?

0

Da się

        Console con=System.console();
        double a=0.0;
        boolean done=false;
        while(!done)
        {
            String txt=con.readLine("Wpisz liczbe dodatnia i nacisnij ENTER ");
            try
            {
                a=Double.parseDouble(txt);
                if(a>0)
                {
                    done=true;
                }
            }
            catch(Exception e)
            {
            }
        }
0
 System.out.print("Wprowadź pierwszą liczbę: ");
        try
        {
            double a = -1.0;
            while(a<0)
                while(strTok.nextToken()!=StreamTokenizer.TT_NUMBER)
                {
                        System.out.println("To nie jest liczba, wpisz jeszcze raz");
                }
                a = strTok.nval;
            }
        }catch(IOException e){
                System.out.print("Błąd"+e);
                return;
        }

Oczywiście ten kod jest jeszcze do poprawki (wypadałoby powiadomić użytkownika, że liczba ma być dodatnia i takie tam). A najlepiej, to przenieść wczytywanie do osobej funkcji:

double wczytajLiczbeDodatnia(StreamTokenizer strTok){
  bool bOk = false;
  double a = -1.0;
  do{
      try
        {
                while(strTok.nextToken()!=StreamTokenizer.TT_NUMBER)
                {
                        System.out.println("To nie jest liczba, wpisz jeszcze raz");
                }
        }catch(IOException e){
                System.out.print("Błąd"+e);
                return;
        }
    a = strTok.nval;
    if(a>0){
      bOk = true;
    }else{
       System.out.println("Liczba ma być dodatnia");
    }
  }while(bOk != true);
  return a;
}
0

Dzięki panowie, o to mi chodziło. :)

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