- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
现在已经四天了,我是初学者,我似乎无法完成这项工作。因此,到目前为止,我的程序会询问用户名并在我打开的文件中查找匹配项。如果找到匹配,它将询问用户密码,如果在文件中找到用户密码,它将检查用户名、密码,如果行上有特定单词以及凭据,它将打开一个凭据文件。因此,如果第一次正确输入用户名,我的代码就会工作,它会要求输入密码,然后中断或让用户查看文件。效果非常好。
但是,如果第一次尝试时用户名不正确,则它不会检查第二次是否正确。它只是在 2 次尝试后结束(应该是 3 次失败的尝试)。这是我的代码
public static void main(String[] args)throws Exception {
Scanner scnr = new Scanner(System.in);
//open credentials file
FileInputStream in = new FileInputStream ("./credentials.txt");
Scanner credentials = new Scanner(in);
// open zookeeper file
FileInputStream in1 = new FileInputStream ("./zookeeper.txt");
Scanner zookeeperInfo = new Scanner(in1);
FileInputStream in2 = new FileInputStream ("./admin.txt");
Scanner adminInfo = new Scanner(in2);
FileInputStream in3 = new FileInputStream ("./veterinarian.txt");
Scanner vetInfo = new Scanner(in3);
String userName = "";
String userPassword = "";
String original = "";
int numAttempts = 0;
boolean run = true;
while (run) {
System.out.println ("User Name or Q: ");
userName = scnr.nextLine();
if (userName.equals("Q") || numAttempts > 3) {
run = false;
System.out.println("Goodbye..");
}
else {
while(credentials.hasNextLine()) {
String line = credentials.nextLine();
if (line.contains(userName)) {
System.out.println(userName);
System.out.println("Gimme the password: ");
userPassword = scnr.nextLine();
original = userPassword;
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(original.getBytes());
byte[] digest = md.digest();
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
if (line.contains(userName) && line.contains(sb.toString()) && line.contains("zookeeper")) {
while (zookeeperInfo.hasNextLine()) {
System.out.println(zookeeperInfo.nextLine() + " ");
}
break;
}
else if (line.contains(userName) && line.contains(sb.toString()) && line.contains("admin")) {
while (adminInfo.hasNextLine()) {
System.out.println(adminInfo.nextLine()+ " ");
}
break;
}
else if (line.contains(userName) && line.contains(sb.toString()) && line.contains("veterinarian")) {
while (vetInfo.hasNextLine()) {
System.out.println(vetInfo.nextLine() + " ");
}
break;
}
}
}
Picture of working part of the code Picture of non-working part
我真的不知道。我觉得我什至没有做得正确,但我所有的尝试都在这里结束。我必须在周日之前提交,但整整一周之后都没有任何效果。请帮忙,任何建议将不胜感激!
最佳答案
除了你的代码不容易阅读之外,我还为你做了一些你可能会使用的东西:
public static void main(String[] args) throws Exception {
Scanner userInput = new Scanner(System.in);
File file = new File("credentials.txt");
FileInputStream inputStream;
Scanner credentialsScanner;
File infosFile;
Scanner infoScanner = null;
FileInputStream infosInputStream;
boolean run = true;
int attempts = 0;
String username;
String password;
String line;
while (run) {
System.out.println("Give username:");
username = userInput.nextLine();
if (username.equals("Q") || attempts > 3) {
run = false;
} else {
inputStream = new FileInputStream(file);
credentialsScanner = new Scanner(inputStream);
while (credentialsScanner.hasNextLine()) {
line = credentialsScanner.nextLine();
System.out.println(line);
if (line.contains(username)) {
System.out.println("Give password:");
password = userInput.nextLine();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(password.getBytes());
byte[] digest = md.digest();
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
if (line.contains(sb.toString())) {
if (line.contains("zookeeper")) {
infosFile = new File("zookeeperInfo.txt");
} else if (line.contains("admin")) {
infosFile = new File("adminInfo.txt");
} else if (line.contains("veterinarian")) {
infosFile = new File("vetInfo.txt");
}
infosInputStream = new FileInputStream(infosFile);
infoScanner = new Scanner(infosInputStream);
while (infoScanner != null && infoScanner.hasNextLine()) {
System.out.println(infoScanner.nextLine() + " ");
}
attempts = 0;
break;
}
}
}
attempts++;
}
}
}
如您所见,我简化了您的代码:
当我们继续这个过程时:
接下来是使用MD5解码器进行密码验证。然后,如果当前lin包含解码后的密码,则处理其他文件信息的读取。
每次尝试后,我们都会增加尝试计数器,但如果该过程成功,我们会重置该计数器并中断循环。
它可能不完全是您的目的,但它可能会帮助您改进代码并更多地理解一些逻辑。
关于java - While 循环在检查输入之前结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51901548/
我正在寻找一种使此打印 HTML 代码 fragment 向后兼容旧 Android 版本的简单方法: @TargetApi(Build.VERSION_CODES.KITKAT) private v
我在 GCC 终端 (centos linux) 中为 ATM 项目编译以下 c 和 .h 代码时收到以下错误。请帮忙,因为我是编程新手。 validate_acc.h #ifndef _VALIDA
在写关于 SO 的不同问题的答案时,我制作了这个片段: @import url('https://fonts.googleapis.com/css?family=Shadows+Into+Light'
试图弄清楚我应该如何在 my_div_class 之前放置一个 span 而不是替换所有它。现在它取代了 div,但我不想这样做。我假设它类似于 :before 但不知道如何使用它。 { va
我正在使用选择库 http://github.hubspot.com/select/和 noUiSlider https://refreshless.com/nouislider/ .我面临的问题如下
我是开发新手,独自工作。我正在使用 Xcode 和 git 版本控制。可能我没有适本地组织和做错事,但我通常决定做 promise 只是为了在我破坏一切之前做出安全点。在那一刻,我发现很难恰本地描述我
我想确保在同一个桶和键上读取和写入时,应该更新获取的值,也就是说,应该在对其进行写入操作之后获取它。我怎样才能做到这一点? 我想要的是,如果我更新一个键的值,如果我同时使用不同线程获取值,则更新同一个
我的问题与this有关问题,已经有了答案: yes, there is a happens-before relationship imposed between actionsof the thre
The before and after hook documentation on Relish仅显示 before(:suite) 在 before(:all) 之前调用。 我什么时候应该使用其中
我有 CSV 行,我想在其中检测所有内部双引号,没有文本限定符。这几乎可以正常工作,但我的正则表达式还可以检测双引号后的字符。 CSV 部分: "7580";"Lorem ipsum";"";"Lor
是否可以通过Youtube数据API检查广告是否可以与特定视频一起显示? 我了解contentDetails.licensedContent仅显示视频是否已上传至同一伙伴然后由其声明版权。由于第三者权
考虑一下用漂亮的彩色图表描述的“像素管道” https://developers.google.com/web/fundamentals/performance/rendering/ 我有一个元素(比
之前?
在 MVC3 中,我可以轻松地将 jQuery 脚本标签移动到页面底部“_Layout.vbhtml” 但是,在 ASP.NET MVC3 中,当您使用编辑器模板创建 Controller 时,脚手
悬停时内容被替换,但是当鼠标离开元素时我希望它变回来。我该怎么做? $('.img-wrap').hover(function(){ $(this).find('h4').text('Go
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 有关您编写的代码问题的问题必须在问题本身中描述具体问题 - 并包含有效代码以重现该问题。
版本:qwt 6.0.1我尝试开发频谱的对数缩放。我使用简单的线条来启用缩放plotspectrum->setAxisScaleEngine(QwtPlot::yLeft, new QwtLog10S
我有两个相同的表,I_Subject 和 I_Temp_Subject,我想将 Temp_Subject 表复制到 Subject 表。 I_Temp_Subject 由简单用户使用,I_Subjec
我的印象是第一次绘制发生在触发 DOMContentLoaded 事件之后。特别是,因为我认为为了让第一次绘制发生,需要渲染树,它依赖于 DOM 构造。另外,我知道 DOM 构造完成时会触发 DOMC
我是一名优秀的程序员,十分优秀!