因此,对于作业,我必须制作一个程序,要求输入一个字符串然后检测回文。
事情是,也可以放入数字。当字符串输入的一半以上是数字时,需要将字符串视为数字字符串并忽略其他符号。
所以我想把输入字符串放到一个数组中,然后查找数字(在48和57之间的ASCII#)并计算它们。然后比较数字与信件数量的比较,看看哪一个有更多。
然而,我似乎无法编程它计算字符串中的数字的事情。有人可以帮助我,我已经有了这个:public class opgave41 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("input a string:");
String reeks = sc.nextLine();
char[] array1 = reeks.toCharArray();
int numbers;
int other;
for(int i=0;i<array1.length;i++){
if (int array1[i] < 57 || int array1[i] > 48)
numbers++;
else
other++;
}
System.out.prinln(numbers);
System.out.prinln(other);
}
}
如果我编译它我得到这个:
opgave41.java:38: '.class' expected
if (int array1[i] < 57 || int array1[i] > 48)
^
opgave41.java:39:')'预计
数字++;
^
2个错误
我该如何解决这个问题?
答案 0 :(得分:1)
在解决了明显的语法错误后,我得到了基于你的代码:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("input a string:");
String reeks = sc.nextLine();
int numbers = 0;
int other = 0;
for (char c : reeks.toCharArray()) {
if ('0' <= c && c <= '9')
numbers++;
else
other++;
}
System.out.println(numbers);
System.out.println(other);
}
我还用字符文字替换了幻数48和57,因为这样可以使意图更清晰。
答案 1 :(得分:1)
不需要循环,检查等,对于数字使用正则表达式会更容易。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("input a string:");
String reeks = sc.nextLine();
String symbols = reeks.replaceAll("[0-9]", "");
System.out.println("others - " + symbols.length());
System.out.println("numbers - " + (reeks.length() - symbols.length()));
}
答案 2 :(得分:0)
您正在检查array1.length
这是字符数组的长度。我认为这不是你想要的。您希望array1[i]
获取当前字符。另外,我认为你有这个倒退:
if (int array1.length < 57 || int array1.length > 48)
假设你修复此问题以使用array1[i]
,它仍然会检查当前字符不是否为数字。但是你继续增加numbers
计数器。此外,您还可以考虑使用Character.isDigit()
方法。
答案 3 :(得分:0)
逻辑正常*,您只需要使用char
数组的元素而不是数组长度。所以只需替换
if (int array1.length < 57 || int array1.length > 48)
与
if (array1[i] <= '9' && array1[i] >= '0')
(请注意&&
,因为您希望两个条件都为真。如果您使用||
,则意味着少于9 OR < em>大于0 ,对于任何char
)
* 除了一些语法错误