厨师在一张纸上写了一些文字,现在他想知道文中有多少个洞。什么是洞?如果您将纸张视为平面并将字母视为平面上的曲线,则每个字母将平面划分为区域。例如,字母“A”,“D”,“O”,“P”,“R”将平面划分为两个区域,因此我们说这些字母每个都有一个孔。类似地,字母“B”具有两个孔,诸如“C”,“E”,“F”,“K”的字母没有孔。我们说文本中的孔数等于文本字母中的孔总数。帮助Chef确定文本中有多少个孔。输入
第一行包含单个整数T <= 40,即测试用例的数量。 T测试案例如下。每个测试用例的唯一行包含仅由英文字母的大写字母组成的非空文本。文本的长度小于100.输入中没有任何空格。输出
对于每个测试用例,输出一行包含相应文本中的孔数。实施例
输入:2 CODECHEF DRINKEATCODE
输出:2 5
我的程序无法正常工作。我认为应该可以正常工作但是这会将计数器值显示为0,而不管使用的条件是什么。
import java.util.Scanner;
public class holes {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int t;
String[][] array = new String[40][100];
int[] counter = new int[40];
System.out.println("Enter The Test Cases");
t = scan.nextInt();
for(int w =0; w<t;w++ ){
String input = scan.next();
array[w] = input.split("(?!^)");
for(int a=0;a<array[w].length;a++ ){
if(array[w][a] =="A"||array[w][a] =="P"||array[w][a] =="D"||array[w][a] =="O"||array[w][a] =="R"){
counter[w]++;
System.out.println(array[w][a]);
}
else if(array[w][a]=="B"){
counter[w]=counter[w]+2;
System.out.print(counter[w]+"\n");
}
}
}
for(int e=0;e<t;e++ ){
System.out.println(counter[e]);
}
scan.close();
}
}
答案 0 :(得分:2)
您应该将代码拆分为方法以使其更简单。例如,有一个方法可以计算一个String的漏洞:
private static int countHoles(String s) {
int count = 0;
for (char c : s.toCharArray()) {
if ("ADOPQR".indexOf(c) != -1) {
count++;
} else if (c == 'B') {
count += 2;
}
}
return count;
}
// or:
private static int countHoles(String s) {
return s.chars().map(c -> c == 'B' ? 2 : "ADOPQR".indexOf(c) != -1 : 1 : 0).sum();
}
然后你可以打印countHoles
的结果,为你可以使用split(" ")
获得的每个输入,而不是将它们存储在一个数组中。