此代码的输出始终为“无效密码” 应该修改什么才能获得正确的输出?
q=* q=foo q=foo q=foo&filter=A:2,B:1
&filter=A:2
AggA AggA AggB AggB
1(10) 1(5) *2(5)* *2(5)*
2(10) 2(5)
3(10) 1(10)
AggB AggB AggB AggB
1(10) 1(5) 1(5) *1(3)*
2(10) 2(5) 2(5) 2(5)
3(10) 3(0) 3(5) 3(5)
答案 0 :(得分:0)
在if语句中执行OR时,代码中只有一个|
。它应该是||
。昨天我被困在同一件事上一小时:l
答案 1 :(得分:0)
|
是一个按位运算符,||
是一个逻辑运算符。此外,逻辑存在问题。 Character
不能同时是信件和数字,因此此条件始终为true
。尝试使用&&
if(!Character.isLetter(c) && !Character.isDigit(c))
return false;
答案 2 :(得分:0)
|是一个按位或,||是合乎逻辑的还是。你应该知道区别。
通过这种方式工作:
if(!Character.isLetter(c) && !Character.isDigit(c))
return false;
=>如果字符不是字母也不是数字返回false
答案 3 :(得分:0)
我觉得我应该在你的方法中提到一些错误,因为它可能有助于节省你将来的时间。
如果你的方法isValid
,你有一个循环遍历字符串中的所有字符。这是执行此操作的正确方法,因此您清楚地知道要实现目标需要做什么。
但是,从逻辑上讲,此方法接下来的操作如下:
如果第一个字符不是字符,或者不是数字,您的方法将会失效。理性地说,你有正确的想法,但一封信不是一个数字,反之亦然。
假设第一个字母是' A' - 它不是数字,所以返回false。 如果第一个字符是' 1' - 它不是一封信,所以返回false。
如您所见,将操作员更改为&&如果只输入数字或字母,将停止程序失败,但如果添加任何非字母数字值,将返回false。
如果您需要强制执行至少一个数字和至少一个数字,则必须在迭代时存储字符串中的数字和字符数。
有两个变量,一个用于存储总位数,另一个用于存储字符数,并在逐步执行字符串时递增。
如果找到的总位数大于零,并且找到的字母总数大于零,则您的密码有效。
import java.util.*;
import java.lang.String;
import java.lang.Character;
public class password {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Please enter a Password: ");
String password = input.next();
if (isValid(password)) {
System.out.println("Valid Password");
} else {
System.out.println("Invalid Password");
}
}
public static boolean isValid(String password) {
if(password.length()<8) {
return false;
} else {
int dCount = 0;
int cCount = 0;
for (int i=0; i<=password.length()-1; i++) {
char c=password.charAt(i);
if(Character.isLetter(c) {
cCount++;
}
if(Character.isDigit(c)) {
dCount++;
}
}
return dCount > 0 && cCount > 0;
}
}