java - 强行检查 : don't proceed if there is already a string in column number 0

标签 java string

通过以下代码,我希望将所有以相同名称开头的字母组合到一个数组列中,并在第二列中保留与字母相关的数字的总和。

例如:

array_1 = { {"bat","1"},
            {"rat","2"},
            {"ball","3"},
            {"run","4"},
            {"lizard","5"}
          }

into array_2 = { {"b","4"},
                 {"r","6"},
                 {"l",5}
                }

下面的代码给出了一半正确的结果。问题是,当它到达 ball 时,它会再次添加以 b 开头的下一个字母并将其存储为单独的值。问题是第 42 行。我已经标记了这一点。我应该如何进行检查,确保添加后不会添加字母表的数字。

package keylogger;
import java.util.Arrays;
public class ArrayTester {

private static int finalLength=0;
private static String firstAlphabet[][];
private String data[][] = { 
                               {"Nokia" , "7"},
                               {"Blackberry" , "1"},
                               {"Nimbus","10"},
                               {"Apple","19"},
                               {"Ami","21"},
                               {"Bug","35"},
                               {"Native","200"},
                               {"zebra","100"},
                               {"Nine","9"}

                          };  

public void calculator() {
   try {  
    // traverse the whole array
    firstAlphabet = new String[data.length][data.length]; // set the length of firstAlphabet array

    for(int i=0;i<data.length;i++) {
        firstAlphabet[i][0] = data[i][0].substring( 0, 1); // get the first alphabet
        firstAlphabet[i][1] = data[i][1];
        int k = i+1;
        int v = k;
        int t=0;
        for(int j=0;j<data.length-v;j++) {
            System.out.println("Inner for loop" + j);
            String s = data[k][0];
// line 42:
            if(firstAlphabet[i][0].compareToIgnoreCase(s.substring(0, 1))==0) { 
               System.out.println("If statement");
               firstAlphabet[i][0] = s.substring(0, 1);
               Integer z = Integer.parseInt(data[k][1]) + Integer.parseInt(firstAlphabet[i][1]);
               firstAlphabet[i][1] = z.toString();                   
            }
            k++;
        }   
    }               
  }catch(Exception exc) {
     exc.printStackTrace();
   }
}

public static void main(String args[]) {
    ArrayTester o = new ArrayTester();
    o.calculator();
    for(String s[] : firstAlphabet) {
        for(String x : s) {
            System.out.println(x);
        }
    }
}
}

输出

Inner for loop0

Inner for loop1

If statement

Inner for loop2

Inner for loop3

Inner for loop4

Inner for loop5

If statement

Inner for loop6

Inner for loop7

If statement

Inner for loop0

Inner for loop1

Inner for loop2

Inner for loop3

If statement

Inner for loop4

Inner for loop5

Inner for loop6

Inner for loop0

Inner for loop1

Inner for loop2

Inner for loop3

If statement

Inner for loop4

Inner for loop5

If statement

Inner for loop0

If statement

Inner for loop1

Inner for loop2

Inner for loop3

Inner for loop4

Inner for loop0

Inner for loop1

Inner for loop2

Inner for loop3

Inner for loop0

Inner for loop1

Inner for loop2

Inner for loop0

Inner for loop1

If statement

Inner for loop0

N

226

null

null

null

null

null

null

null

B

36

null

null

null

null

null

null

null

N

219

null

null

null

null

null

null

null

A

40

null

null

null

null

null

null

null

A

21

null

null

null

null

null

null

null

B

35

null

null

null

null

null

null

null

N

209

null

null

null

null

null

null

null

z

100

null

null

null

null

null

null

null

N

9

null

null

null

null

null

null

null

如果我们注意到与字母相关的总和是正确的。唯一的问题是重复。例如,N=219,即 200+19

最佳答案

重复是因为您没有将已选择的字母标记为脏。

因此,在第一个循环中,N 本身已获得最终计数,但根据您当前的逻辑,当 Nimbus 进行迭代时,您将完成整个处理,因为您尚未将 N 标记为脏。

public void calculator() {
        List<String> marked = new ArrayList<String>();
        try {
            // traverse the whole array
            firstAlphabet = new String[data.length][2]; // set the length of first Alphabet array
            for (int i = 0; i < data.length; i++) {
                String firstLetter = data[i][0].substring(0, 1);
                if(marked.contains(firstLetter)){
                    continue;
                }
                marked.add(firstLetter);
                firstAlphabet[i][0] = firstLetter; // get the first alphabet
                firstAlphabet[i][1] = data[i][1];
                int k = i + 1;
                int v = k;
                int t = 0;
                for (int j = 0; j < data.length - v; j++) {
                    System.out.println("Inner for loop" + j);
                    String s = data[k][0];
                    if (firstAlphabet[i][0].equalsIgnoreCase(s.substring(0,
                            1))) { // line 42
                        System.out.println("If statement");
                        firstAlphabet[i][0] = s.substring(0, 1);
                        Integer z = Integer.parseInt(data[k][1])
                                + Integer.parseInt(firstAlphabet[i][1]);
                        firstAlphabet[i][1] = z.toString();
                    }
                    k++;
                }
            }
        } catch (Exception exc) {
            exc.printStackTrace();
        }
    }

关于java - 强行检查 : don't proceed if there is already a string in column number 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10752857/

相关文章:

objective-c - Objective-C 中字符串与数组元素的串联

java - setScrollX 函数不能正常工作

java - 将索引处的字符串数组与字符串进行比较

java - 如何在 Java 中识别和删除从我们的 webapp 发起的 Threads/ThreadLocals?

java - JAXB 属性绑定(bind) - 为什么需要它

python - DataFrame 列将字典列表存储为字符串 : Parse it and build a new dataframe

python - 仅当字符串与其他字符间隔开时,如何检查行中的确切字符串?

c++ - 转换日期格式 Www Mmm dd hh :mm:ss yyyy to dd hh:mm:ss string in c++

java - Hibernate-Search flushToIndexes 导致 java.lang.OutOfMemoryError(堆空间)

java - org.springframework.orm.hibernate3.HibernateSystemException : a different object with the same identifier value was already associated with the session