gpt4 book ai didi

java - 检查字符串中的数字

转载 作者:行者123 更新时间:2023-12-02 02:24:47 26 4
gpt4 key购买 nike

注意:我知道有很多方法可以让这个变得更简单,但这是不允许的。我仅限于简单的、基本的 java、循环和手写方法。甚至数组也是不允许的。正则表达式也是如此。

任务是检查句子中每个单词中的数字,找到数字最大且同时为 3 次幂的单词。我在这里做了所有的事情,直到我输入这样的内容之前它都工作正常。

asdas8 dasjkj27 asdjkj64 asdjk333 asdjkj125

我收到输出 64 而不是 125,因为它在到达第一个不是 3 的幂的数字时停止检查。

如何继续迭代直到句子结束并避免在达到 3 的非幂数时停止,如何修改此代码来实现这一点?

编辑:但是如果我在不符合条件的单词后输入多个单词,它会正常工作。

例如:

asdas8 dasjkj27 asdjkj64 asdjk333 asdjkj125 asdash216

这是我的代码:

public class Nine {

static int num(String s) { // method to change string to int
int b = 0;
int o = 0;
for (int i = s.length() - 1; i >= 0; i--) {
char bi = s.charAt(i);
b += (bi - '0') * (int) Math.pow(10, o);
o++;

}

return b;
}

static boolean thirdPow(int a) {
boolean ntrec = false;
if (Math.cbrt(a) % 1 == 0)
ntrec = true;
return ntrec;

}



static int max(int a, int b) {
int max= 0;
if (a > b)
max= a;
else
max= b;
System.out.print(max);
return max;
}

static String search(String r) {
String current= ""; // 23aa64
String currentA= "";
String br = ""; // smjestamo nas broj iz rijeci 23
int bb = 0; // nas pretvoreni string u broj
int p = 0;

for (int i = 0; i < r.length(); i++) {

current+= r.charAt(i);
if (r.charAt(i) == ' ') {
for (int j = 0; j < current.length(); j++) {
while ((int) current.charAt(j) > 47 && (int) current.charAt(j) < 58) {
br += current.charAt(j);
j++;
}
bb = num(br);
System.out.println("Third pow" + thirdPow(bb));

if (thirdPow(bb)) {
p = max(p, bb);

}

br = "";

}

current= "";

}

}

String pp = "" + p;
String finalRes= "";
for (int u = 0; u < r.length(); u++) {
currentA+= r.charAt(u);
if (r.charAt(u) == ' ') {
if (currentA.contains(pp))
finalRes+= currentA;
currentA= "";
}
}
System.out.println(p);
return finalRes;

}

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("Enter sentence: ");
String r = scan.nextLine();

System.out.println("Our string is : " + search(r));

}
}

最佳答案

我假设每个单词都由空格分隔并且包含非整数。

使用正则表达式肯定会降低代码复杂度,我们来试试这段代码:-

String input = "asdas8 dasjkj27 asdjkj64 asdjk333 asdjkj125";

String[] extractWords = r.split(" "); //extracting each words

int[] numbers = new int[extractWords.length]; // creating an Integer array to store numbers from each word

int i=0;

for(String s : extractWords) {
numbers[i++] = Integer.parseInt(s.replaceAll("\\D+", "")); // extracting numbers
}

现在,“numbers”数组将包含 [8, 27, 64, 333, 125]

您可以使用您的逻辑来找到其中的最大值。希望这会有所帮助。

关于java - 检查字符串中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47962311/

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