gpt4 book ai didi

java String - 字符串索引超出范围,charAt

转载 作者:行者123 更新时间:2023-12-02 00:17:25 25 4
gpt4 key购买 nike

我尝试编写一个程序,它可以找到回文数(它必须是两个3位数字的乘积,我希望它包含6位数字,但这并不重要)。这是我的代码:

public class palindromicNumber {
public static void getPalindromicNumber() {
boolean podminka = false;
int test;
String s;
for (int a = 999; podminka == false && a > 100; a--) {
for (int b = 999; podminka == false && b > 100; b--) {
test = a * b;
s = Integer.toString(test);
int c = 0;
int d = s.length();
while (c != d && podminka == false) {

if (s.charAt(c) == s.charAt(d)) { // I think that problem is here but I can't see what
System.out.println(s);
podminka = true;
}
c++;
d--;
}
}
}
}
}

如果我想编译它:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.charAt(String.java:695)
at faktorizace.palindromicNumber.getPalindromicNumber(palindromicNumber.java:24)
at faktorizace.Faktorizace.main(Faktorizace.java:19)

Java 结果:1

最佳答案

这里有两个问题:

  • 正如其他答案所提到的,您从错误的上限开始
  • 如果 c 从奇数开始,而 d 从偶数开始,则 c永远等于d。您需要使用

    while (c < d && !podminka) // Prefer !x to x == false

此外,明智地使用 breakreturn 可以避免您根本不需要 podminka

除此之外,您还遇到了关注点分离问题。您的方法当前执行三件事:

  • 以特定方式迭代数字
  • 检查它们是否是回文
  • 打印找到的第一个

你应该将它们分开。例如:

public void printFirstPalindrome() {
long palindrome = findFirstPalindrome();
System.out.println(palindrome);
}

public long findFirstPalindrome() {
// Looping here, calling isPalindrome
}

public boolean isPalindrome(long value) {
// Just checking here
}

我怀疑 findFirstPalindrome 通常也会采用一些参数。此时,您将拥有更容易编写和测试的方法。

关于java String - 字符串索引超出范围,charAt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11654455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com