我目前正在编写一个小程序,向用户询问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);
}