import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Sort { public static void main(String[] args) { Scanner input = new Scanner(System.in); Boolean checker = false; String regex = "^(?:([0-9])(?!.*\1))*$"; Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE); System.out.println("Enter the Year:"); String number = input.next(); int year = Integer.valueOf(number); Matcher matcher; while(!checker) { matcher = pattern.matcher(number); if(matcher.find()) checker = true; else year++; number = Integer.toString(year); } System.out.println(number); } }
我和我的朋友正在尝试创建一种算法来计算输入的数字之后不会重复的数字(例如input: 1000 output: 1023)。
input: 1000 output: 1023
感兴趣的代码是:
Matcher matcher; while(!checker) { matcher = pattern.matcher(number); if(matcher.find()) checker = true; else year++; number = Integer.toString(year); }
由于某种原因,checker即使将其设置为false,也将其设置为true matcher.find()。每个输出的结果将与输入具有相同的值。
checker
false
true matcher.find()
这是什么问题,我们将如何更改逻辑,以便当数字中的数字重复时,检查器返回假?
考虑这些行
if(matcher.find()) checker = true; else year++; number = Integer.toString(year);
有一些问题。我认为您缺少牙套。和你忘了更新checker的时候matcher.find()是假的。我建议你改为这样做
checker = matcher.find(); if (!checker) { // checker is not true... e.g. checker == false. year++; number = Integer.toString(year); // I assume you wanted this here. }