我正在编写一个代码,用于将信号从一种形式转换为另一种形式。 我的代码运行良好,但最终失败。
INPUT: String [] test = {"B","100","B","B","2","3","100","B","200","B","3","17","B","10" };
所需产出:B / 101 B / 1 B / 106 B / 201 B / 21 B / 11
GOT OUTPUT:B / 1 B / 101 B / 1 B / 106 B / 201 B / 21
所需输出和得到输出的比较
在输出中不需要第一项B / 1。
在所需输出的末尾缺少B / 11。
算法:“B”替换为“B /”,然后添加出现在字符串中的数字,如“2”,“3”,“100”,得到105和“1” 将被添加为“B”因此106,最终结果变为'B / 106'。
我是java和编程的新手。我需要帮助来获得所需的输出。
这是我的代码:
public class SignalConversion {
public static void main(String args[]) {
String [] test ={"B","100","B","B","2","3","100","B","200","B","3","17","B","10" };
int i=0; int x=test.length;
String netSignal="";
int total=0;
while(!(x==0)){
StringBuilder sb_matra= new StringBuilder();
StringBuilder sb_sur= new StringBuilder();
if(!test[i].equals("B")) {
total=total+(Integer.valueOf(test[i]));
}
else {
total=total+1;
sb_sur.append(test[i]+"/"+Integer.toString(total)+" " );
total=0;
}
netSignal=sb_sur.toString()+sb_matra.toString();
System.out.printf(netSignal);
i++;
x--;
}
}
}
答案 0 :(得分:1)
当你遇到“B”时,你应该开始对它后面的数字求和,但只在遇到下一个“B”时输出结果。这就是你最终遇到问题的原因。在计算它应该附带的数字之前,你会在遇到它时打印第一个“B”。
同样,在循环结束时,你应该添加一个带有最后总和的附加B.
这是一种潜在的方式(我认为这个循环比你的简单):
StringBuilder sb_sur= new StringBuilder();
boolean first = true;
for (int i = 0; i < test.length; i++) {
if(!test[i].equals("B")) {
total=total+(Integer.valueOf(test[i]));
} else {
if (!first) {
total=total+1;
sb_sur.append("B/"+Integer.toString(total)+" " );
total=0;
}
first = false;
}
}
total=total+1;
// account for the last B
sb_sur.append("B/"+Integer.toString(total)+" " );
答案 1 :(得分:1)
我会这样做,
public static void main(String[] args) {
String[] test = { "B", "100", "B", "B", "2", "3", "100", "B", "200",
"B", "3", "17", "B", "10" };
boolean foundB = false;
int total = 0;
for(int i=0;i<test.length;i++){
if(foundB){
if(test[i].equals("B")){
System.out.print("B/"+(total+1)+" ");
total=0;
}else{
total += Integer.parseInt(test[i]);
}
if(i==(test.length-1)){
System.out.print("B/"+(total+1)+" "); // The last B
}
}
if(test[i].equals("B")){
foundB = true; // start counting only after you find a B
}
}
}
答案 2 :(得分:0)
哦,我看到Eran做了几乎同样的尝试。
String[] test = { "B", "100", "B", "B", "2", "3", "100", "B", "200", "B", "3", "17", "B", "10" };
List<String> resultTest = new ArrayList<>();
int value = 0;
for (int i = 0; i < test.length; i++) {
if (i != 0 && test[i].equalsIgnoreCase("B")) {
resultTest.add("B\\" + (value + 1));
value = 0;
} else {
if (!test[i].equalsIgnoreCase("B")) {
value += Integer.parseInt(test[i]);
}
}
}
resultTest.add("B\\" + (value + 1));
resultTest.forEach(System.out::println);