import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 求123456789 字符串1..9 之间不改数字位置随机+-要求表达结果和为100,写出这样表达式 */ public class Demo09 { public static void main(String[] args) { int i = 0; //调用方法判断最后的和是否为100 while (true) { //调用方法生成待遇随机加减号的1-9的字符串 String s = strGen(); if (isOK(s)) { System.out.printf("%s=100%n", s); ++i; } if (i >= 10) { break; } } } //使用正则表达式,判断相加是否等于100 public static boolean isOK(String str) { //定义正则表达式 Pattern p = Pattern.compile("-?\\d+"); //寻找匹配正则表达式的字符串 Matcher m = p.matcher(str); int sum = 0; while (m.find()) { int anInt = Integer.parseInt(m.group()); sum += anInt; } return sum == 100; } //生成1-9的数字,并将- + 随机插入数字中 public static String strGen() { StringBuilder sbu = new StringBuilder("1"); String[] s = {"", "-", "+"}; Random r = new Random(); for (int i = 2; i <= 9; i++) { sbu.append(String.format("%s%d", s[r.nextInt(s.length)], i)); } return sbu.toString(); } }
运行结果:
因为是随机生成了10 次,所以会有重复的结果出现
程序中应注意的事项:
方法strGen() :
首先StringBuider 在 声明是就应先将“1”存入缓存空间中,这样防止了加号或者减号出现在1的前面
方法isOK() :
前两步是正则表达式的编写及匹配,其中用到的是Pattern类及Matcher类,这里还应该注意的是循环时应选择的关键字我们应记住一点,知道循环次数的选用for循环,不知道循环次数的选择while循环