【发布时间】:2018-09-18 13:41:36
【问题描述】:
import java.util.Scanner;
public class Out {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
String[] arr = new String[n];
int result = 0;
for(int i = 0; i < n; i++) {
arr[i] = input.next();
System.out.println(arr[i]);
System.out.println(Double.parseDouble(arr[i].replace(Character.toString(arr[i].charAt(arr[i].length() - 1)), "")));
System.out.println(Double.parseDouble(Character.toString(arr[i].charAt(arr[i].length() - 1))));
result += Math.pow(Double.parseDouble(arr[i].replace(Character.toString(arr[i].charAt(arr[i].length() - 1)), "")), Double.parseDouble(Character.toString(arr[i].charAt(arr[i].length() - 1))));
}
System.out.println(result);
}
}
这段代码应该得到一个字符串(例如 567)并将 56 提高到 7 的幂。它仅适用于我有 212 的情况。我知道使用 arr[i]/10 很容易和 arr[i]%10。但我无法理解这里的行为。我想知道为什么这个解决方案不起作用。谢谢!
【问题讨论】:
-
我至少会简化代码。像
Math.pow(Double.parseDouble(arr[i].replace(Character.toString(arr[i].charAt(arr[i].length() - 1)), "")), Double.parseDouble(Character.toString(arr[i].charAt(arr[i].length() - 1))))这样的行非常难以阅读。程序应该首先被人类理解,其次是计算机。 -
不替换字符,而是尝试从 0 n-1 获取子字符串,忽略最后一个字符。如果你替换它,第n-1个字符将有“”,第n个字符将有字符串结尾,我猜这会给你带来麻烦。
-
我不完全确定你在这里问什么。如果您只有三个输入整数
m、n和e(指数),打印Math.pow(10 * n + m, e)不够吗? -
@PaulBenn 这里的问题如下: Double.parseDouble(arr[i].replace(Character.toString(arr[i].charAt(arr[i].length() - 1)), "")) 导致输入字符串 212 的结果为 1.0,而预期为 21.0。此外,输入整数的计数基于第一个输入是动态的。以下每个整数值都属于 MN 类型,其中 length(MN) >= 2,length(M) >= 1,length(N) = 1。
-
请使用移动变量——它会有很大帮助(也看看
String.substring方法——replace可能不是你想要的)并且它适用于(小)数字没有重复。
标签: java string parsing character charat