Quelqu'un peut-il aider avec mes 2 problèmes de Java que j'ai. 1 is try catch 2 est l'endroit où mettre un morceau de code

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

  •  06-07-2019
  •  | 
  •  

Question

J'ai un code sur lequel je travaille pour une mission pour uni et, en réalité, je ne suis pas très bon avec Java, mais j'ai essayé. J'essaie de faire en sorte que mon essai soit efficace, mais il ne semble jamais faire ce qu'il est censé faire. Je crois que l'exception est erronée, mais je ne sais pas quelle exception utiliser pour résoudre le problème, car j'essaie d'empêcher les lettres d'être saisies et uniquement les chiffres.

Le dernier problème que je rencontre est que je ne sais pas où mettre ce morceau de code:

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

Je ne sais pas dans quelle partie il est supposé aller.

Toute aide serait grandement appréciée.

Ceci est mon code, je suis désolé s'il est un peu en désordre. Codage

Était-ce utile?

La solution

Votre code est très prolixe - la plupart des commentaires sont inutiles (même s'il peut vous être demandé de les inclure). Au lieu de:

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

Vous pouvez écrire:

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

minutes = MINUTES_PER_HOUR * hours;

Lorsque vous aurez rangé le code, il sera beaucoup plus facile de voir la logique.

Autres conseils

Je vous conseille d'apprendre à utiliser le débogueur de votre IDE. Il existe d'excellents tutoriels vidéos gratuits ici .

Avec le débogueur, vous n’êtes plus obligé de placer des instructions println sur tout votre code.

Vraiment, prenez le temps.

Votre try / catch probablement fonctionne

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

mais vous tombez dans le code qui traite ensuite l'entrée quel que soit . Vous devez quitter le sous-programme de votre bloc catch et traiter l'entrée valide dans le bloc try . par exemple

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
 }

Voici le correctif. Sérieusement, j'ai d'abord pensé que votre ne fonctionnerait pas. Mais je l'ai formaté dans mon IDE et viens d'ajouter une méthode principale pour appeler votre méthode cancel (). Cela a fonctionné.

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);
        }
        }
}

Quelques commentaires généraux.

Vous devriez déplacer la plupart de ce code hors du constructeur Time () et dans une méthode principale. Ce code n'a rien à voir avec l'instanciation d'un objet de temps.

Votre boucle while devrait contenir tout ce que vous souhaitez répéter. Dans ce cas, demandez à l’utilisateur une heure de départ, une heure d’arrivée et calculez la différence.

Vous avez du code dupliqué, pourquoi ne pas disposer d’une méthode pour demander à l’utilisateur de saisir une chaîne de temps et l’analyser. Quelque chose comme

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, je comprends maintenant :) après un peu de sommeil et tôt le matin et après mûre réflexion.

Tout d'abord, j'ai mis toutes les tâches importantes à effectuer dans des méthodes libérant mon domaine constructeur, comme beaucoup d'entre vous me l'ont dit et oui, je suis d'accord, il est tellement plus facile de voir ce qui se passe maintenant.

Pour résoudre le problème des captures d’essai. J'ai réalisé ce matin que je la mettais au mauvais endroit et que je n'essayais pas ce que je voulais, mais la ligne principale que je voulais essayer signifiait que je devais mettre mon autre code à l'intérieur, c'était bien et la déclaration de capture se termine maintenant si c'est touché. J'ai juste besoin de savoir comment boucler la boucle au lieu de terminer.

Pour résoudre mon autre problème, à savoir le bouton d'annulation, j'ai utilisé la déclaration while (true) et l'ai également placée à l'emplacement où se trouvait JOptionPane, les deux seuls endroits où l'annulation pouvait être activée. savoir si celui-ci a raison alors si quelqu'un peut me dire si c'est le cas (ou mieux encore, je le commenterai à ces endroits)

Donc, voici le code de travail, il y a encore quelques bugs, comme je dois trouver comment le limiter à hh.mm car pour le moment, je peux mettre n'importe quel moment au hasard. J'ai aussi besoin de trouver comment gérer 24 heures avec 00 heure car il ne gère pas cela du tout pour le moment, il n’aime pas non plus si vous mettez 12,00 et 3,00 dans soit il arrive avec -9 ou quoi que ce soit qui a fonctionné pour être, encore une fois, il s’agit de gérer 24 heures et la dernière petite chose qui cloche, c’est que si vous vous y trompez, il se fermera plutôt que de tourner en boucle, ce que je vais essayer de résoudre maintenant.

Codage

Merci pour l'aide de chacun hier soir, vous m'avez tous tellement aidé

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top