我希望程序只打印符合IF语句设置的所有规则的9位数字。但是,我觉得它不必要地长,如果有人能告诉我一些缩短它的语法,我会很喜欢它。在此先感谢:)
编辑:我需要仅使用数字1,2和1来计算3x3网格的每个不同组合。但是,1,2和2。 3只能单行ONCE,也可以单行ONCE。 注:我认为有12种不同的组合。
public static void main (String [] args){
int count =0;
for (int i=111111111; i<1000000000; i++){
int X=i;
String x= String.valueOf(X);
String a1= x.substring(0,1);
String a2= x.substring(1,2);
String a3= x.substring(2,3);
String b1= x.substring(3,4);
String b2= x.substring(4,5);
String b3= x.substring(5,6);
String c1= x.substring(6, 7);
String c2= x.substring(7,8);
String c3= x.substring(8,9);
int A1= Integer.parseInt(a1);
int A2= Integer.parseInt(a2);
int A3= Integer.parseInt(a3);
int B1= Integer.parseInt(b1);
int B2= Integer.parseInt(b2);
int B3= Integer.parseInt(b3);
int C1= Integer.parseInt(c1);
int C2= Integer.parseInt(c2);
int C3= Integer.parseInt(c3);
if (A1+B1+C1+A2+B2+C2+A3+B3+C3==18
&& A1<=3 && A2<=3 && A3<=3 && B1<=3 && B2<=3 && B3<=3 && C1<=3 && C2<=3 && C3<=3
&& A1+B1+C1==6 && A1+A2+A3==6
&& A1!=B1 && B1!=C1 && A1!=C1 && A1!=A2 && A2!=A3 && A1!=A3 && C1!=C2 && C2!=C3
&& C1!=C3 && B1!= B2 && B1!=B3 && B2!=B3 && A3!=B3 && A2!=B2 && A3!=C3 && A2!=C2
&& B2!=C2)
{
count++;
System.out.println(count);
System.out.println(i);
答案 0 :(得分:2)
我同意其他人的说法,有很多方法可以简化您的代码,但如果只是想要简化if
语句,您可以这样做:
if (!(x.contains("6"))
&& A1*B1*C1==6 && A2*B2*C2==6 && A3*B3*C3==6
&& A1*A2*A3==6 && B1*B2*B3==6 && C1*C2*C3==6)
这样做的原因是,只有3个正整数的袋子是{1, 2, 3}
和{1, 1, 6}
,所以如果我们从一开始就排除6个,那么每个行和每列必须包含1个,2和3。
答案 1 :(得分:1)
我会写两个单独的方法来帮助检查。一个用于检查三个字符确实是'1', '2', 3'
,另一个用于接受String
个9个字符并检查String
的正确六个子集。然后,您可以在if
语句中调用该方法一次。
public static boolean is123(char first, char second, char third) {
List<Character> chars = Arrays.asList(first, second, third);
return chars.contains('1') && chars.contains('2') && chars.contains('3');
}
public static boolean validSquare(String square) {
for (row = 0; row < 3; row++) {
if (!is123(square.charAt(row * 3), square.charAt(row * 3 + 1), square.charAt(row * 3 + 2))) {
return false;
}
}
for (column = 0; column < 3; column++) {
if (!is123(square.charAt(column), square.charAt(column + 3), square.charAt(column + 6))) {
return false;
}
}
return true;
}
因此,如果您调用原始整数if
,则if (validSquare(String.valueOf(i)))
语句将为i
。顺便说一句,最好使用更具信息性的变量名来代替i
。
答案 2 :(得分:0)
你应该将你的逻辑放入一个方法中。
public bool isXValid(int x)
{
//insert logic here
}
然后你的if语句看起来像这样
if(isXValid(x))
{
//bla bla bla
}
更重要的是,您的方法应该更好地反映您尝试做的事情,并且从外观上看,您希望x
符合以下规则:
1
,2
和3
如果我要写一个方法来检查,我会:
将我的数字字符串拆分为3位数字。
我会验证每个3位数字都有1,a 2和a 3.如果有人没有,我会return false
,否则,我只是继续使用该功能。
我会确保2个3位数字在同一个地方没有相同的数字。同样,如果2分享了相同的数字,我会return false
,否则我会继续使用该功能。
最后,如果没有发现问题我会return true
。