Может кто-нибудь помочь с моими 2 проблемами с Java у меня есть. 1 это попытка поймать 2, где положить кусок кода

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

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть часть кода, над которой я работаю над заданием для универа, и по правде говоря, я не очень хорош в Java, но я пробовал. Я пытаюсь заставить свою попытку поймать на работе, но, кажется, она никогда не делает то, к чему она стремится. Я думаю, что у меня неправильное исключение, но я не уверен, какое исключение использовать для решения проблемы, так как я пытаюсь остановить ввод букв и только цифры.

Последняя проблема, с которой я столкнулся, это то, что я не знаю, где разместить этот фрагмент кода:

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

Я не уверен, в какую часть он должен идти.

Любая помощь будет очень полезна.

Это мой код, извините, если он немного грязный. Кодирование

Это было полезно?

Решение

Ваш код очень многословен - большинство комментариев не нужны (даже если вас могут попросить их включить). Вместо:

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

Вы можете написать:

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

minutes = MINUTES_PER_HOUR * hours;

Когда вы приведете в порядок код, вам будет намного легче увидеть логику.

Другие советы

Я советую вам научиться использовать отладчик вашей IDE. здесь есть несколько отличных бесплатных обучающих видео .

С помощью отладчика вам больше не придется помещать операторы println по всему вашему коду.

Действительно, не торопитесь.

Ваш try / catch, вероятно, работает работает

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

но вы проваливаетесь на код, который затем обрабатывает ввод независимо . Вам нужно выйти из подпрограммы в своем блоке catch и обработать допустимый ввод в блоке try . например.

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
 }

Вот исправление. Серьезно, сначала я думал, что ты не будешь работать. Но я отформатировал его в своей IDE и просто добавил основной метод для вызова метода cancel (). Это сработало.

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

Некоторые общие комментарии.

Вы должны переместить большую часть этого кода из конструктора Time () в метод main. Этот код не имеет ничего общего с созданием экземпляра объекта времени.

Ваш цикл while должен содержать все, что вы хотели бы повторить. В этом случае запрашиваем у пользователя время отправления, время прибытия и вычисляем разницу.

У вас есть дублированный код, почему бы не найти метод, чтобы попросить пользователя ввести строку времени и проанализировать ее. Что-то вроде

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

Хорошо, я понял это сейчас :) после небольшого сна и раннего утра и тщательного обдумывания.

Прежде всего, я вложил всю важную работу в методы, освобождающие мою область конструктора, как многие из вас сказали мне делать, и да, я согласен, теперь намного проще увидеть, что происходит сейчас.

Чтобы решить проблему, попробуйте поймать. Сегодня утром я понял, что помещаю это не в то место, и оно не пытается попробовать то, что я хотел, и основная строка, которую я хотел попробовать, означала, что я должен был поместить другой код в него, и выражение catch теперь заканчивается, если он попал. Мне просто нужно выяснить, как это сделать, а не заканчивать.

Чтобы решить мою другую проблему, которая была кнопкой отмены, я использовал оператор while (true) и также поместил его туда, где также была JOptionPane, так как это были единственные 2 места, где можно было нажать кнопку отмены ... Я не знать, если это правильно, так что если кто-то может сказать мне, если это так (или еще лучше, я закомментирую это в тех местах)

Итак, вот рабочий код, в нем все еще есть пара ошибок, так как мне нужно выяснить, как ограничить его до hh.mm, так как на данный момент я могу указать любое случайное время. Мне также нужно найти как обрабатывать 24 часа с 00, так как в данный момент это вообще не обрабатывается, ему также не понравится, если вы поставите 12,00 и 3,00, либо получите -9, либо что-то еще сработало опять же, речь идет об управлении 24 часами, и последняя мелочь, с которой у него что-то не так, это то, что если вы допустите ошибку, она скорее закроется, чем зациклится, и я сейчас попытаюсь разобраться.

Кодирование

Спасибо за помощь всем вчера вечером, вы все мне очень помогли

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top