我目前正在编写一个小程序,向用户询问PinCode,如果Pin正确,则返回“ :)”;如果Pin错误,则返回“ :(”。
我的代码由一个Java文件和一个文本文件组成。

这是代码:

import java.io.*;
import java.util.*;

public class Main {

static public boolean readPinsData(File dataFile, ArrayList<Integer> data) {
   boolean err = false;
   try {
      Scanner scanner = new Scanner(dataFile);
      String line;
      while (scanner.hasNext()) {
         line = scanner.nextLine();
         try {
            data.add(Integer.parseInt(line));
         } catch (NumberFormatException e) {
            e.printStackTrace();
            err = true;
         }
      }
      scanner.close();
   } catch (FileNotFoundException e) {
      e.printStackTrace();
      err = true;
   }

   return err;
}


public static void main(String[] args) {

    System.out.println("-----------------------");
    System.out.println("MY APP");
    System.out.println("-----------------------");
    Console console = System.console();
    int pinSize = 0;
    int nbTry = 0;

    do{
      do{
    char passwordArray[] = console.readPassword("Enter pin: ");
    pinSize = passwordArray.length;

    if(pinSize != 4){
            System.out.println("Pin must be 4 digits");
        } else {
            System.out.println("Checking...");
        }


   ArrayList<Integer> pins = new ArrayList<Integer>();
   readPinsData(new File("bdd.txt"), pins);
   //System.out.println(pins);
   //System.out.println(passwordArray);


   String[] thePins = new String[pins.size()];
   for (int i = 0; i < thePins.length; i++) {
    thePins[i] = pins.get(i).toString();
}

   String passEntered = String.valueOf(passwordArray);





   for(int i = 0 ; i < thePins.length ; i++){
      if(passEntered.equals(thePins[i]) && pinSize == 4){
          System.out.println(":)");
        } else if(!passEntered.equals(thePins[i]) && pinSize == 4){
            nbTry++;
        }

    }

  }while(nbTry < 3);
   }while(pinSize != 4);

}
}


这是bdd.txt,其中存储了所有好的引脚:

1111
2222
3333
4444
5555
6666
7777
8888
9999


实际上,我的问题是将尝试次数限制为3次。我需要解释:

->用户必须输入图钉

->他输入一个4位数的密码,并显示“ :)”(应用已完成)

->他输入了错误的4位数密码,并显示“ :(”,并且nbTry必须为++。
在这种情况下,他只剩下2次尝试

->他还可以输入一个1位数的密码或2位数的密码或3位数的密码...,在这种情况下,nbTry不受影响,他只需要重新输入4位数的密码即可。

我找不到nbTry左部分的处理方法。有什么想法吗?

最佳答案

您是否希望他只能输入4位数的密码,还是希望他能够输入任意长度的密码?

编辑:

阅读您的main我看到您有两个'do ... while'。如果您更改它们的顺序,它应该可以工作。我无法测试它的atm,因为我正在移动设备上尝试如下操作:

do {
  do {
      ....
  } while (pinSize != 4);
} while (nbTry < 3);


编辑2:

boolean loginCorrdect = false;
for (int i = 0; i < thePins.length; i++) {
   if (passEntered.equals(thePins[i]) && pinSize == 4) {
      System.out.println(":)");
      booleanCorrect = true;
      break;
   } else if (!passEntered.equals(thePins[i]) && pinSize == 4) {
      System.out.println(":(");
   }

}
if(!booleanCorrect && pinSize == 4){
   nbTry++;
}


希望您能在手机上打字很难。

完整的主要代码:
    公共静态void main(String [] args){

System.out.println("-----------------------");
System.out.println("MY APP");
System.out.println("-----------------------");
Console console = System.console();
int pinSize = 0;
int nbTry = 0;
boolean authenticated = false;

do {
   do {
      char passwordArray[] = console.readPassword("Enter pin: ");
      pinSize = passwordArray.length();

      if (pinSize != 4) {
     System.out.println("Pin must be 4 digits");
      } else {
     System.out.println("Checking...");
      }

      ArrayList<Integer> pins = new ArrayList<Integer>();
      readPinsData(new File("bdd.txt"), pins);
      // System.out.println(pins);
      // System.out.println(passwordArray);

      String[] thePins = new String[pins.size()];
      for (int i = 0; i < thePins.length; i++) {
         thePins[i] = pins.get(i).toString();
      }

      String passEntered = String.valueOf(passwordArray);

      for (int i = 0; i < thePins.length; i++) {
         if (passEntered.equals(thePins[i]) && pinSize == 4) {
    System.out.println(":)");
    authenticated = true;
    break;
}
}

} while (pinSize != 4);
  if (!authenticated && pinSize == 4) {
System.out.println(":(");
nbTry++;
 }
} while (nbTry < 3 && !authenticated);
}

09-28 09:12