Alguém pode ajudar com as minhas 2 questões Java que eu tenho. 1 é captura tentativa 2 é onde colocar uma peça de código

StackOverflow https://stackoverflow.com/questions/1633763

  •  06-07-2019
  •  | 
  •  

Pergunta

Eu tenho um pedaço de codificação que eu estou trabalhando para uma atribuição para uni e na verdade eu não sou tão grande com Java, mas eu tentei. Eu estou tentando obter minha try catch ao trabalho mas nunca parece estar a fazer o que é suppoes para. Acho que tenho o errado exceção, mas eu não tenho certeza qual exceção para uso para o problema que eu estou tentando letras deixar de ser digitado e números apenas.

O último problema que estou tendo é que eu não sei onde colocar este pedaço de codificação:

 {
                   while (true)
        {
            cancel();
        }
 } 

Não tenho certeza em que parte é suppoes para ir.

Qualquer ajuda seria muito appricated.

Este é meu código, me desculpe se é um pouco confuso. Codificação

Foi útil?

Solução

Seu código é muito detalhado - a maioria dos comentários são desnecessários (mesmo que você pode ser instados a incluí-los) Assim em vez de:

minutesfromhours = 60*minutes;
                //To change the hours into minutes by diving the hour by 60 for departure.

Você poderia escrever:

public final static int MINUTES_PER_HOUR = 60;
//...

minutes = MINUTES_PER_HOUR * hours;

Quando você tiver arrumado o código será muito mais fácil de ver a lógica.

Outras dicas

Eu aconselho você a aprender a usar o depurador do seu IDE. Há alguns grandes vídeos tutoriais gratuitos aqui .

Com o depurador você já não terá que colocar declarações println todo o seu código.

Realmente, tomar o tempo.

Seu try / catch provavelmente faz trabalho

 try
 {
    depart= Double.parseDouble(departtime);
    System.out.println(depart);
 }
 catch (NumberFormatException e)
 {
     System.out.println(e.getMessage());
 }
 System.out.println("Time accepted");

mas você cair para o código que processa a entrada independentemente . Você precisa sair do sub-rotina em seu bloco catch, e processar a entrada válida no bloco try. por exemplo.

try
 {
    depart= Double.parseDouble(departtime);
    System.out.println(depart);
    System.out.println("Time accepted");
    // do further processing here
 }
 catch (NumberFormatException e)
 {
     System.out.println(e.getMessage());
     // exit here
 }

Aqui está a correção. Sério, primeiro eu pensei que você não iria funcionar. Mas eu formatado-lo no meu IDE e acabou de adicionar um método principal para chamar o método cancel (). Funcionou.

import javax.swing.JOptionPane;

public class Time
{
   public int difference =0;
// Stores the difference of departure and arrival time.

   public static void main(String args [])
   {
       Time obj=new Time();

            while (true)

              obj.cancel();

   }

public Time()
    {
      String departtime = JOptionPane.showInputDialog("Enter Depart Time in 24 hour time:");
// Allows the user to input their departure time into a JOptionPane.
      String arrivaltime = JOptionPane.showInputDialog("Enter Arrival Time in 24 hour time:");
// Allows the user to input their arrival time into a JOptionPane.

      double depart = 0;
// Store the time the user first inputs as a double.
      double arrival = 0;
// Store the time the user inputs secondly as a double.

      int minutes = 0;
// To store the hours for departure.

      int minutes2 = 0;
// To store the minutes of departure.

      int totalminutesfordeparture = 0;
// To store the full time for departure as minutes.

      int minutesfromhours = 0;
// To store the hours as minutes for depature

     int arrivals = 0;
// To store the hours arrival.

     int arrival2 = 0;
// To store the minutes for arrival.

      int arrivalhoursasminutes = 0;
// To store the arrival hours as minutes.

      int totalminutesforarrival = 0;
// To store the full time for departure in minutes.

     int actualtimehours= 0;
// The number of hours it will take on the journey.

     int actualtimeminutes=0;
// The number of minutes it will take on the journey.






// **Start of removing the decimal for time 1 and time 2**\\
     {
         // Doesn't work
         try
         {
         depart= Double.parseDouble(departtime);
         System.out.println(depart);
         }
         catch (NumberFormatException e)
         {
             System.out.println(e.getMessage());
         }
         System.out.println("Time accepted");

         arrival= Double.parseDouble(arrivaltime);



         int time = (int)(depart*100);
            // Gets rid of the decimal point in the departure time.

         System.out.println ("Time with no decimal point "+ time);
             // Check the decimal is being removed.

         int time2=(int)(arrival*100);
             // Gets rid of the decimal point in arrival time.

         System.out.println ("Time with no decimal point "+ time2);
             // Check the decimal is being removed in arrival.

// **End of removing the decimal in the times**\\

// **Start of seperating the hours and minutes in departure time**\\
         {

             minutes2=time%100;
                 // To separate the minutes from the hours for departure.

            minutes=time/100;
                 // To seperate the hours ready to change them into minutes.

            System.out.println("Hours of departure "+ minutes);
                 // Check that the hours are seperating from the minutes for
                    // departure.

            System.out.println("Minutes of departure "+ minutes2);
                // Check that the minutes are seperating from the hour for
                // departure.

           arrival2=time2%100;
                 // To separate the minutes from the hours.

            arrivals=time2/100;
                 // To seperate the hours ready to change them into minutes.

            System.out.println("Hours of arrival "+ arrivals);
                // Check that the hours are seperating from the minutes for
                // arrivals.

            System.out.println("Minutes of arrival "+ arrival2);
                // Check that the minutes are seperating from the hour for
                // arrivals.
         }
// **End of seperating the hours and minutes in departure time**\\

// **Start of hours being changed to minutes and adding it all up**\\
         {
             minutesfromhours = 60*minutes;
                // To change the hours into minutes by diving the hour by 60 for
                // departure.

             System.out.println("Hours into minutes "+ minutesfromhours);
                // Checks that the hours are being turned into minutes for
                // departure.

             totalminutesfordeparture= minutesfromhours+minutes2;
                // To add together the hour minutes and the minutes from the
                // time to give the total time in minutes for departure.

             System.out.println("Total Departure time in minutes "+ totalminutesfordeparture);
                // Checks that the hours as minutes are being added up with the
                // minutes of the time for departure.


             arrivalhoursasminutes = 60*arrivals;
                // To change the hours into minutes for arrivals by diving the
                // hours by 60 for arrivals.

             System.out.println("Hours into minutes for arrival "+ arrivalhoursasminutes);
                // Check that it is adding up the hour minutes and the minutes
                // for departure.

             totalminutesforarrival= arrivalhoursasminutes+arrival2;
                // To add together the hour minutes and the minutes from the
                // arrivals.

             System.out.println("Total arrival time in minutes "+ totalminutesforarrival);
                // Check that it is adding up the hour minutes and the minutes
                // for arrivals
         }

// **End of hours being changed to minutes and adding up**\\

// **Start of Finding the difference in minutes**\\
         {

             difference=totalminutesforarrival-totalminutesfordeparture;
                // Works out the difference of minutes by taking arrival time in
                // minutes away from the departure time in minutes.
             System.out.println("Difference "+ difference);
                // Check to see that it is taking arrival from departure.

             JOptionPane.showMessageDialog(null, "It will take " + difference);
         }
            // **End of finding the difference in minutes**\\

         // **start of not working changing minutes back to hours.**\\

         {
             actualtimehours= difference/60;
             actualtimeminutes= difference/60;

             System.out.println("It will take "+ actualtimehours);
             System.out.println("It will take "+ actualtimeminutes);


         }

     }

    }

// ** Method incase cancel button is pressed **\\
        public void cancel()
    {
        String input=JOptionPane.showInputDialog("Cancel button was pressed");
        if (input==null)
        {
                System.exit(0);
        }
        }
}

Alguns comentários gerais.

Você deve mover a maior parte deste código fora do construtor Time (), e em um método principal. Este código não tem nada a ver com instanciar um objeto de tempo.

O seu loop while deve incluir tudo o que você gostaria de repetir. Neste caso, perguntando ao usuário por um tempo partem, uma hora de chegada, e calculando a diferença.

Você ter duplicado código, porque não têm um método para pedir ao utilizador para introduzir um tempo String, e analisá-lo. Algo como

public class Time {
    private int hours;
    private int minutes;
    etc...
}    

// in main
while (true) {
    Time departTime = askUser("depart");
    Time arriveTime = askUser("arrive");
    calculateDifference(departTime, arriveTime);
}

// elsewhere
public Time askUser(String name) {
    String theTime = JOptionPane.showInputDialog(
        String.format("Enter %s Time in 24 hour time:", name));
    Time result = parseTime(theTime, name);
    return result;
}

Ok I figura tenho isso agora :) depois de um pouco de sono e de manhã cedo e pensamento cuidadoso.

Em primeiro lugar eu coloquei todas as coisas fazendo importante em métodos liberando minha área construtor como tantos de vocês me disse para fazer e sim, eu concordo que é muito mais fácil de ver o que está acontecendo agora.

Para resolver o problema try catch. Eu percebi esta manhã que eu estava colocando no lugar errado e ele não estava tentando o que eu queria para tentar a linha principal que eu queria para tentar significou que eu tive que colocar minha outra codificação no interior foi bem e a instrução catch agora termina se é hit. Eu só preciso descobrir como fazer um loop de volta ao redor em vez de terminar.

Para resolver o meu outro problema que era o botão eu usei o while (true) declaração e também colocá-lo em onde o JOptionPane foi também como foi a apenas 2 lugares a cancelar poderia ser pressionado cancelar ... Eu não sei se isso é o certo então se alguém pode me dizer se é (ou melhor ainda, eu vou comentá-la nos lugares)

Então, aqui está o código de trabalho, ainda há um par de erros no-lo como eu tenho que descobrir como limitá-lo a apenas hh.mm como no momento eu posso colocar qualquer momento aleatório. Eu também preciso encontrar a forma de lidar com 24 horas com 00 tempo que ele não lidar com isso em tudo, no momento, ele também não gosta disso, se você colocar 12,00 e 3,00 em ambos ele vem com -9 ou seja o que tem trabalhado para fora a ser, mais uma vez que é sobre o gerenciamento de 24 horas e a última coisa pequena que tem de errado com ele é que se você erro, ele vai fechar em vez de circuito que eu vou estar tentando resolver agora.

Codificação

Obrigado por ajuda última noite de todas as pessoas que ajudaram-me tanto

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top