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
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
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.
Obrigado por ajuda última noite de todas as pessoas que ajudaram-me tanto