2013-05-18 3 views
0

По какой-то причине я теряю доступ к своим переменным внутри заявление переключателя,возвращает переменную к методу внутри коммутатора заявления

Я не разрешается использовать какие-либо глобальные переменные.

import java.util.Scanner; 
public class Projet { 

    public static void main(String[] args) { 
     String clef="vide"; 
     Scanner in = new Scanner(System.in); 
     showMenu(in); 
     in.close(); 
     } 

Основной метод поддерживается как можно более чистым ... вызова меню только один раз.

public static void showMenu(Scanner in){ 
    System.out.printf("******************************************%n" + 
      "* Choisissez une des options suivantes : *%n" + 
      "* 1) Saisir la clef secrète    *%n" + 
      "* 2) Afficher la clef secrète   *%n" + 
      "*******************************************%n%n%n"); 
    choice(in); 
} 

showMenu(in) В зависимости от выбора, сделанного мы получили бы в конкретном случае.

public static int getNumber(Scanner in){ 
    int choice = in.nextInt(); 
    in.nextLine(); 
    return choice; 
} 

getNumber(in) возвращение нашего предыдущего входа, чтобы мы могли попасть в корпус. Двойная функция будет удалена в следующей версии.

public static void choice(Scanner in){ 

    try { 

     switch(getNumber(in)){ 

Случай 1 -> Мы supose сохранить переменную, которая музыкальный ключ, возвращаемый saisirClef(in)

 case 1: 
      String clef = saisirClef(in); 
      break; 

Случай 2 -> Он должен храниться значение из корпуса 1?

 case 2: 
      afficherClef(); 
      break;  

      default: 
       System.out.println("Default"); 
       break; 
      } 
     } catch (Exception e) { 
      System.out.println("Please enter a number"); 
      //choice(in); 
     } 
    } 

saisirClef(in) способ вызванный в случае один.

public static String saisirClef(Scanner in){ 
    System.out.println("Saisir la clef secrète :"); 
    String a = in.nextLine(); 
    System.out.println("Voici ce que vous avez tapper : "+a); 
    return a; 
} 

afficherClef метод вызывается в случае 2

public static String afficherClef() { 
     return clef; 
    } 

} 

Каждый раз, когда showMenu(in) мои переменные списываться. Я мог бы переносить переменную ключа из шкафа в ...

Не могли бы вы помочь мне выяснить, что я делаю неправильно здесь? Я использую операторы return, я просто не понимаю, почему они исчезают.

+0

Я собираюсь повторно редактировать это не выходит, как ясно – hayonj

+0

вы объявили флаг переменной несколько раз, так что вместо него, почему бы вам не объявить один флаг глобальную переменную, чтобы иметь доступ все over..it выглядит немного путают ... –

+0

не разрешено использовать ЛЮБЫЕ глобальные переменные для этого упражнения – hayonj

ответ

0

Я не уверен, чего вы пытаетесь достичь. В коде есть несколько компиляций и логическая ошибка. Я попытался исправить их в соответствии с моим пониманием и размещением кода (поскольку он слишком велик, чтобы опубликовать комментарий) с комментариями, где я вносил изменения. Надеюсь, это поможет вам.

public class Project { 

/** 
* @param args 
* @param Scanner 
*/ 
public static void main(String[] args) { 
    String clef = "vide"; 
    Scanner in = new Scanner(System.in); 

    showMenu(in,clef);// passed clef as a parameter - The New Idiot 
    in.close(); 

} 

/** 
* added an extra parameter 
* @param clef 
* @modified The New Idiot 
*/ 
public static void showMenu(Scanner in,String clef) { 
    System.out.printf("******************************************%n" 
      + "* Choisissez une des options suivantes : *%n" 
      + "* 1) Saisir la clef secrète    *%n" 
      + "* 2) Afficher la clef secrète   *%n" 
      + "* 3) Chiffrer un fichier     *%n" 
      + "* 4) Déchiffrer un fichier    *%n" 
      + "* 5) Quitter        *%n" 
      + "******************************************%n%n%n"); 
    // passed clef as a parameter - The New Idiot 
    choice(in,clef); 
} 

public static int getNumber(Scanner in) { 
    int choice = in.nextInt(); 
    in.nextLine(); 
    return choice; 
} 

/** 
* added an extra parameter 
* @param clef 
* @modified The New Idiot 
*/ 
public static void choice(Scanner in,String clef) { 

    try { 

     switch (getNumber(in)) { 
     case 1: 
      // removed duplicate variable declaration - @modified The New Idiot 
      clef = saisirClef(in); 
      resetMenu(clef, in); 
      // passed clef as param - @modified The New Idiot 
      showMenu(in,clef); 
      break; 
     case 2: 
      //String should be compared with equals() method - @modified The New Idiot 
      if (clef.equals("vide")) { 
       System.out.println("Erreur : Aucune clef n’a été saisie."); 
       // passed clef as param [email protected] The New Idiot 
       showMenu(in,clef); 
      } else { 
       System.out.println("La clef secrète est :" + clef); 
      } 
      break; 
     case 3: 
      chiffrerFichier(); 
      break; 
     case 4: 
      dechiffrerFichier(); 
      break; 
     case 5: 
      quitApplication(); 
      break; 
     default: 
      System.out.println("Default"); 
      break; 
     } 
    } catch (Exception e) { 
     System.out.println("Please enter a number"); 
     // choice(in); 
    } 
} 

/** 
* Commented this method, as it does nothing 
* @return 
* @modified The New Idiot 
*/ 
/*public static String afficherClef() { 
    return clef; 
}*/ 

public static boolean isKeyLength(String a) { 
    boolean flag = true; 
    if (a.length() < 4) { 
     System.out.println("Erreur : Le mot est trop petit"); 
     flag = false; 
    } 
    return flag; 
} 

public static String validateKey(String a) { 

    // declared a local variable flag 
    // it will be true only if sKeyLength(a) and isKeyChar(a) are true 
    // @modified The New Idiot 
    boolean flag = isKeyLength(a) && isKeyChar(a); 

    if (flag) { 
     String clef = a; 
     System.out.println(clef); 
     return clef; 
    } else { 
     String clef = "showMenu"; 
     return clef; 
    } 
} 

public static boolean isKeyChar(String a) { 
    boolean flag = true; 
    for (int i = 0; i <= a.length() - 1; i++) { 
     // Verifie Majuscule 
     if ((int) a.charAt(i) >= 65 && (int) a.charAt(i) <= 90) { 
      System.out.println("Au moins une des lettre est en Majuscule"); 

      // Continue Program 
     } else { 
      System.out 
        .println("Erreur : Au moins un caractère est invalide "); 
      flag = false; 
     } 
     // Verifie Doublons 
     if (i == a.length() - 1) { 
      if (a.charAt(i) == a.charAt(i - 1)) { 
       System.out 
         .println("Erreur : Il existe au moins un doublon."); 
       System.out.println("Dernier iteration"); 
       // Restart Program 
       flag = false; 
      } else { 
       // Continue Program 
       System.out.println("No doubles found"); 
       System.out.println("Dernier iteration"); 
      } 
     } else { 
      if (a.charAt(i) == a.charAt(i + 1)) { 
       System.out 
         .println("Erreur : Il existe au moins un doublon."); 
       System.out.println("Iteration :" + i); 
       // Restart Program 
       flag = false; 
      } else { 
       // Continue Program 
       System.out.println("No doubles found"); 
      } 
     } 
    } 
    return flag; 
} 

public static String saisirClef(Scanner in) { 
    System.out.println("Saisir la clef secrète :"); 
    String a = in.nextLine(); 
    System.out.println("Voici ce que vous avez tapper : " + a); 
    return validateKey(a); 
} 

public static void resetMenu(String clef, Scanner in) { 
    if (clef == "showMenu") { 

     saisirClef(in); 
    } else { 
     System.out.println("Clef saisie avec succes"); 
    } 
} 

public static void chiffrerFichier() { 
    System.out.println("Chiffrer un fichier :"); 
} 

public static void dechiffrerFichier() { 
    System.out.println("Déchiffrer un fichier :"); 
} 

public static void quitApplication() { 
    System.out.println("Quitter :"); 
} 

} 
+0

Вы удалили единственный метод, который мне действительно нужен в случае 2 ... Пожалуйста, см. мой Edit – hayonj

+0

Я удалил метод, который не имеет никакой цели в жизни, по крайней мере это написано таким образом. Кроме того, я сделал много изменений, следуя комментариям – NINCOMPOOP

Смежные вопросы