2017-08-28 3 views
-3

Je suis un débutant qui apprend Java, et j'essaye d'écrire un programme pour convertir une heure entrée par l'utilisateur à 12 heures, ou si c'est fourni en format 12 heures, pour le convertir en 24 heures.Conversion d'horloge de 24 heures en 12 heures - problème d'accolade d'accolades

J'ai écrit du code, qui a fonctionné comme je l'ai testé étape par étape, jusqu'à ce que je tente de modifier pour convertir le temps de 12 heures en format 24 heures.

Mon code est ci-dessous. Je m'excuse pour les redondances et la technique très inefficace, mais bon, je dois commencer quelque part. Je crois que mon problème est de séparer les blocs de code, car j'essaie d'avoir une instruction if primaire pour tester si l'entrée se termine par 'm' (c'est à dire dans 12 heures ou 24 heures), puis plusieurs imbriqués if, else et else if instructions.

import java.util.Scanner; 

public class TimeConverter 
{ 

    public static void main (String [] args) 
{ 

    Scanner ask_user = new Scanner (System.in); 
    System.out.println("Enter a time ([h]h:mm [am|pm]): "); 
    String enter_time = ask_user.nextLine(); 
    String am_pm = enter_time.substring(6); 
    String am = ("am"); 
    String pm = ("pm"); 
    if (enter_time.substring(7).equals("m")) 
{ 
    if (am_pm.equals(am)) 
{ 
    String am_12 = enter_time.substring(0, 2); 
    String mins = enter_time.substring(2,5); 
    int am_12i = Integer.parseInt(am_12); 
    if (am_12i != 12) 
{ 
    String am_sub = enter_time.substring(0,5); 
    System.out.println(am_sub); 


} 
     else if (am_12i == 12) 
{ 
     System.out.println("00" + mins); 
} 

} 

     else if (am_pm.equals(pm)) 
{ 
     if (enter_time.equals("12:00 pm")) 
{ 
     System.out.println(enter_time); 
} 
     else 
{ 
     String minutes = enter_time.substring(2,5); 
     String pm_add = enter_time.substring(0,2); 
     int pm_add_i = Integer.parseInt(pm_add); 
     int pm_add_fin = pm_add_i + 12; 
     String pm_add_finS = Integer.toString(pm_add_fin); 
     String converted_pmtime = (pm_add_finS + minutes); 
     System.out.println(converted_pmtime); 
} 


     else if (enter_time.substring(7) != ("m")) 
{ 
     String 24hour = enter_time.substring(0,2); 
     String 12hourmins = enter_time.substring(2,7); 
     int 24hournum = Integer.parseint(24hour); 
     if (enter_time.equals("00:00")) 
{ 
           System.out.println("12" + 12hourmins); 
} 
     else if (24hournum <= 11) 
{ 
     String hour = Integer.toString(24hournum); 
     String minute = enter_time.substring(2,4); 
     String fin = (hour + minute + "am"); 
} 

}  
} 
} 
+2

Apprenez à mettre votre code en retrait. Il va ** vraiment ** vous aider – litelite

+1

Il vous manque plusieurs accolades et les noms de variables ne peuvent pas contenir de nombres (24hours est un nom de variable invalide). Commencez avec ceux. –

+1

Ne comparez pas les chaînes en utilisant ==. "else if (enter_time.substring (7)!= ("m")) "est en fait redondant sous else mais si vous insistez, remplacez! = par! equals –

Répondre

2

Le vrai problème est que vous n'avez pas indenté votre code correctement. Une fois que vous faites cela, il vous sera beaucoup plus facile de détecter les problèmes par vous-même.

Quelques bugs que je trouve de regarder juste rapidement votre code:

  1. Il vous manque quelques parenthèses. (Encore une fois, une indentation correcte vous aidera avec ce lot.)

    if (enter_time.equals("12:00 pm")) 
    { 
        System.out.println(enter_time); 
    } 
    else 
    { 
        String minutes = enter_time.substring(2,5); 
        String pm_add = enter_time.substring(0,2); 
        int pm_add_i = Integer.parseInt(pm_add); 
        int pm_add_fin = pm_add_i + 12; 
        String pm_add_finS = Integer.toString(pm_add_fin); 
        String converted_pmtime = (pm_add_finS + minutes); 
        System.out.println(converted_pmtime); 
    } 
    
    
    else if (enter_time.substring(7) != ("m")) 
    { 
    

    Vous avez une déclaration if. Vous terminez ensuite le bloc avec une instruction else. Là, cependant, est et else if déclaration suivant le else. Les instructions else if doivent être placées après l'instruction if et avant l'instruction else. Soit l'ordre des instructions else et else if est mélangé, soit il manque un crochet de fermeture, }, après l'instruction else, et la partie else if est censée faire partie du bloc précédent.

    Il vous manque également un crochet de fermeture à la fin de votre code.

  2. Les variables ne peuvent pas commencer par un nombre. Toutes vos variables comme 24hournum et 24hour ne sont pas valides. Dans la ligne suivante, int 24hournum = Integer.parseint(24hour);, vous utilisez parseint au lieu de parseInt.

Mon conseil est:

  1. indentent correctement tout votre code. La plupart des IDE viennent avec des raccourcis pour le faire facilement.
  2. Lisez et recherchez tous les messages d'erreur et d'avertissement affichés sur votre console.
  3. Déboguer et parcourir votre code pour trouver quelle partie cause exactement l'erreur.