【问题标题】:Unwanted repetition in output from java loopjava循环输出中不需要的重复
【发布时间】:2015-09-21 07:08:22
【问题描述】:

我正在编写代码来重塑信号。我得到了不需要重复的输出。

输入:

String[] rani = {"A","1","2","OK","B","3","4","OK","B","1"," 3","OK"};

所需的输出:

A/3 B/7 B/4

得到输出:

A/3 A/3 A/3 A/3 B/7 B/7 B/7 B/7 B/4


算法:单个字母字符串(“A”、“B”等)后跟数字字符串(“1”、“2”等)。每个字母字符串后跟斜线和数字的总和,字符串“OK”被忽略。

作为 Java 和编程新手,我需要帮助才能获得所需的输出。

我的代码是:

public class SignalOK {

    public static void main(String[] arg) {
        String finalSignal = "";
        String netSignal = "";
        String name = "";
        int total = 0;
        String[] rani = { "A", "1", "2", "OK", "B", "3", "4", "OK", "B", "1",
                "3", "OK" };

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

            if ((rani[i] == "A") || (rani[i] == "B")) {

                name = rani[i];
            }

            if ((rani[i] == "1") || (rani[i] == "2") || (rani[i] == "3")
                    || (rani[i] == "4")) {

                total = total + Integer.valueOf(rani[i]);
            }

            if (rani[i] == "OK") {

                netSignal = name + "/" + String.valueOf(total) + "   ";
                name = "";
                total = 0;
            }
            finalSignal = finalSignal + netSignal;
        }

        System.out.println(finalSignal);
    }
}

【问题讨论】:

  • 你当前的输出是多少?
  • 旁注:用 StringBuilder 替换循环中的字符串连接。

标签: java arrays string loops


【解决方案1】:

另一种方法:-

    public static void main(String[] args) {
    String[] inputString = {"A","1","2","OK","B","3","4","OK","B","1","3","OK"};
    StringBuilder sb = new StringBuilder();
    for(String s : inputString)
        sb.append(s); // creating a String from array contents
    String ss[] = sb.toString().split("OK"); // split on the basis of 'OK'
    sb.setLength(0); // emptying the sb, so that it can be used later on also
    for(String s : ss){
        char[] ch = s.toCharArray();
        sb.append(ch[0]); // first alphabet like 'A','B','C'
        int val = 0;
        for(int i = 1; i< ch.length ; i++)
            val +=Integer.parseInt(""+ch[i]); // calculate the int value
        sb.append("/"+val+" "); // finally appending alphabet with int value
    }
    System.out.println(sb); 
}

输出:- A/3 B/7 B/4

【讨论】:

    【解决方案2】:

    只需将最终结果字符串连接移动到"OK" if 括号内:

    if (rani[i].equals("OK")) {
        netSignal = name + "/" + String.valueOf(total) + "   ";
        name = "";
        total = 0;   
        finalSignal = finalSignal + netSignal;
    }
    

    此外,始终使用.equals() 来比较字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-27
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多