【问题标题】:How can i count this variables in my DB?我如何在我的数据库中计算这些变量?
【发布时间】:2011-01-10 06:33:55
【问题描述】:

请你帮我解决这个问题?

我有 4 个变量

  1. XTSM 在 0~200 之间
  2. XTS 介于 0~2 之间
  3. XRX 为 0~3
  4. XHAN 为 0~7
  5. ZHTYPE 是以下之一:(1)TCHF_HLF (2)TCHSD (3)TCHFULL

它们与这个形状相关。

XTSM->XTS->XRX->XHAN->ZHTYPE(只是逻辑)

这意味着:

  • 每个 XTSM 有 3 个 XTS (0-2)
  • 每个 XTS 有 4 个 XRX (0-3)
  • 每个 XRX 有 8 个 XCHAN (0-7)
  • 并且每一行都有一个 ZHTYPE 类型

我有一个 14000 行的数据库文件;在此文件中指定了这些变量, 例如 XTSM 在 0~200 之间,但通常小于 200,例如可能指定为 0~60,但永远不会大于 200; 当然对于 XTS、XRX 和 XCHAN 也是如此……所以我们必须将所有变量设为动态变量;

这是文件的一部分(例如已更新): http://www.4shared.com/file/210566155/c080d93a/db_online.html

我想得到这个输出? (我想显示 XTSM 和 XTS 输出,并且在后台必须计算所有这些) 请帮帮我

----Type------------------Total---------------------Total of ZHTYPE-----------------
XTSM:0/XTS:0               in this case is : 29     TCHF_HLF:28 TCHSD:1 TCHFULL:0
XTSM:0/XTS:1               No. of found   
XTSM:0/XTS:2               No. of found   
XTSM:1/XTS:0               No. of found   
XTSM:1/XTS:1               No. of found   
XTSM:1/XTS:2               No. of found 

我不知道,但我想可能是这个;不 ? 这只是伪代码:

for(i ; i< (Total of XTSM) ; i++){
        for(j ; j< (Total of XTS) ; j++){
            for(k ; k< (Total of XRX) ; k++){
                for(l ; l< (Total of XCHAN) ; l++)
                    Print( Total of XTSM:x/XTS:y);
            }
        }

}

感谢您的帮助...

【问题讨论】:

  • 哇,这听起来像 COBOL,而不是 Java。
  • 对我来说像家庭作业......
  • 也闻起来像一个糟糕的标题,如果有人真的弄清楚这里要问什么,他们能给这个问题一个合适的标题吗?
  • 这不是家庭作业;如果你看到我的最后一个问题,你就明白了!!!这与数据库有关...
  • 迈克,有时间我会看看的。

标签: java loops count


【解决方案1】:

在 Java 中这样做没有多大意义,因为您所展示的只是记录处理和最少的文本操作。正如 Kaleb Brasee 在评论中指出的那样,COBOL 可能是合适的。但我不知道 COBOL。

这是一个快速的 Perl 解决方案:

my $records = {};

for (<>) {
  next unless m{XTSM:(\d+)/XTS:(\d+)/XRX:(\d+)/XHAN:(\d+)};
  $$records{"XTSM:$1/XTS:$2"} ||= [];
  push @{$$records{"XTSM:$1/XTS:$2"}}, "$3/$4";
}

print "Type\t\t\tTotal\n";

for (sort keys %$records) {
  print "$_\t\t" . scalar @{$$records{$_}} . "\n";
} 

提供文件的示例输出:

Type                    Total
XTSM:0/XTS:0            29
XTSM:0/XTS:1            29
XTSM:0/XTS:2            29
XTSM:1/XTS:0            29
XTSM:1/XTS:1            29
XTSM:1/XTS:2            29
XTSM:10/XTS:0           14
XTSM:10/XTS:1           14

【讨论】:

    【解决方案2】:

    好的,我想我仍在努力理解这个问题。但我认为,当您访问数据库时,您可以保存 XTSM、XTS、XRX 和 XHAN 的总数。

    或者简单地计算 XTSM 为“?”的 COUNT (在 PreparedStatment 中)。我知道这对于一个已经相当大的数据库来说可能是一笔不小的费用。

    无论如何,您也可以在 java 中执行此操作,因为在 for 的最后一个循环中,i == COUNT。 顺便说一句,您的伪代码需要在 XTSM 中定义 XTS,因为如果不是,它将遍历数据库中的所有 XTS,而不是与您的特定 XTSM 相关的所有 XTS。

    更多想法,在你的四个 fors 中(我一直想说:)),你可以在计数中添加某种 ifs,这样你就知道你是否正在循环通过与 XTSM 有逻辑关系的 XTS并在循环结束时再次 i = COUNT。

    多一点信息会很好,因为我认为我并没有完全理解这个问题。 你如何从数据库中检索数据? 你有任何存储这个的类吗?也许你可以在其中做一些方法来计算这个。

    我认为是一个简单的类

    公共类 Foo{ 诠释 XTSM; 诠释 XTS; 诠释 XRX; 诠释 XHAN; }

    然后将所有行存储在列表(或向量,或映射,可迭代的东西)中,计算列表中具有 XTSM = x 和 XTS = y 的元素 这会或多或少地实现您正在尝试做的事情吗?

    编辑:也许这段代码有帮助,不知道它是否是你正在寻找的......我认为也许一些 PL(如果你在 ORACLE 中)会做得更快。无论如何,一些jave代码......

    public class Foo {
    int XTSM; 
    int XTS; 
    int XRX; 
    int XHAN;
    LinkedList lk;//maybe not a good idea to have it here
    //but hey, it's a 30seconds thought...
    
    public void getItAll() throws Exception{//mostly SQLException, but any you need
        Connection conn=null;
        //make the connection
    
        String query="SELECT XTSM, XTS, XRX, XHAN " +
                " FROM your_table" +
                " WHERE 1=1" +
                " AND 1=1";//add stuff you need to the query
    
        Statement stmt= conn.createStatement();
        ResultSet rst = stmt.executeQuery(query);
        Foo f = null;
        while(rst.next()){
            f = new Foo();
            //yeah, you should have getters and setters
            f.XTSM = rst.getInt("XSTM");
            f.XTS = rst.getInt("XST");
            f.XRX = rst.getInt("XRX");
            f.XHAN = rst.getInt("XHAN");
            this.lk.add(f);
            //this gives you all the table in a list (especifically a linkedlist
        }
    }
    public void calculateItAll() throws Exception{//some exception, probably IO?
        Foo f = null;
        int count =0;
        for(int i=0; i< this.lk.size(); i++){//we iterate through all the table
            f = new Foo();
            f = (Foo)this.lk.get(i);
            count = 0;
            for(int j=0; j<=200;j++){//XSTM
                if(f.XTSM == j){//I keep thinking that getters are good
                    for(int k=0; k<=2;k++){//XST
                        if(f.XTS == k){//do the getters, really
                            for(int m=0;m<=3;m++){//XRX
                                if(f.XRX==m){//add funny comment about getters
                                    for(int n=0;n<=7;n++){//XHAN
                                        if(f.XHAN==n){//man, so good that is almost finished
                                            count++;
                                        }//end of if
                                    }//end of XHAN
                                }//end of if
                            }//end of XRX
                        }//end of if
                    }//end ofXST
                }//end of if
            }//end of XSTM
            //here you write the count and all the Foo somewhere
        }
    }}
    

    【讨论】:

    • 已编辑,带有一些 java 代码,这是您要找的吗?
    • 但是迈克你把我带到这里,试着让你的观点更清楚,一个比我不能给出的更好的答案。 java和perl中的循环和依赖是一样的。
    【解决方案3】:

    请在下面查看我的解决方案。您提供的测试文件 test1.txt 似乎在文件开头有一些特殊字符。

    .

    解决方案

    public class Test {
    
        public static void main(String[] args) throws IOException {
            Test test = new Test();
            test.execute();
        }
    
        private static String TYPE_XTSM = "XTSM";
        private static String TYPE_XTS = "XTS";
        private static String TYPE_XRX = "XRX";
        private static String TYPE_XHAN = "XHAN";
    
        private void execute() throws IOException {
            InputStream in = null;
            BufferedReader br = null;
            TreeMap<Integer, TreeMap<Integer, Integer>> xtsmMap = new TreeMap<Integer, TreeMap<Integer, Integer>>();
            try {
                in = Test.class.getResourceAsStream("test1.txt");
                br = new BufferedReader(new InputStreamReader(in));
                String line;
                while ((line = br.readLine()) != null) {
                    Record rec = new Record(line);
                    processRecord(xtsmMap, rec);
                }
            } finally {
                if (br != null) {
                    br.close();
                }
            }
            printResults(xtsmMap);
        }
    
        private void processRecord(
                TreeMap<Integer, TreeMap<Integer, Integer>> xtsmMap, Record rec) {
            TreeMap<Integer, Integer> xtsMap;
            if (xtsmMap.containsKey(rec.getXtsm())) {
                xtsMap = xtsmMap.get(rec.getXtsm());
            } else {
                xtsMap = new TreeMap<Integer, Integer>();
                xtsmMap.put(Integer.valueOf(rec.getXtsm()), xtsMap);
            }
            if (xtsMap.containsKey(rec.getXts())) {
                Integer count = xtsMap.get(rec.getXts());
                xtsMap.put(Integer.valueOf(rec.getXts()), Integer.valueOf(count
                        .intValue() + 1));
            } else {
                xtsMap.put(Integer.valueOf(rec.getXts()), Integer.valueOf(1));
            }
        }
    
        private void printResults(
                TreeMap<Integer, TreeMap<Integer, Integer>> xtsmMap) {
            System.out.println("Type\t\tTotal");
            Set<Integer> xtsmSet = xtsmMap.navigableKeySet();
            for (Integer xtsm : xtsmSet) {
                TreeMap<Integer, Integer> xtsMap = xtsmMap.get(xtsm);
                Set<Integer> xtsSet = xtsMap.navigableKeySet();
                for (Integer xts : xtsSet) {
                    Integer count = xtsMap.get(xts);
                    String outputLine = TYPE_XTSM + ":" + xtsm + "/" + TYPE_XTS
                            + ":" + xts + "\t" + count;
                    System.out.println(outputLine);
                }
            }
        }
    
        private static class Record {
    
            private Integer xtsm, xts, xrk, xhan;
    
            Record(String line) {
                StringTokenizer st = new StringTokenizer(line, "/");
                while (st.hasMoreTokens()) {
                    String token = st.nextToken();
                    String type = token.substring(0, token.indexOf(":"));
                    String valueStr = token.substring(token.indexOf(":") + 1, token
                            .length());
                    Integer value = Integer.valueOf(valueStr);
                    if (TYPE_XTSM.equals(type)) {
                        xtsm = value;
                    } else if (TYPE_XTS.equals(type)) {
                        xts = value;
                    } else if (TYPE_XRX.equals(type)) {
                        xrk = value;
                    } else if (TYPE_XHAN.equals(type)) {
                        xhan = value;
                    }
                }
            }
    
            public Integer getXtsm() {
                return xtsm;
            }
    
            public Integer getXts() {
                return xts;
            }
    
            public Integer getXrk() {
                return xrk;
            }
    
            public Integer getXhan() {
                return xhan;
            }
        }
    }
    

    .

    输出

    类型总计 XTSM:0/XTS:0 29 XTSM:0/XTS:1 29 XTSM:0/XTS:2 29 XTSM:1/XTS:0 29 XTSM:1/XTS:1 29 XTSM:1/XTS:2 29 XTSM:2/XTS:0 29 XTSM:2/XTS:1 29 XTSM:2/XTS:2 29 XTSM:3/XTS:0 14 XTSM:3/XTS:1 14 XTSM:3/XTS:2 14 XTSM:4/XTS:0 13 XTSM:4/XTS:1 13 XTSM:4/XTS:2 13 XTSM:5/XTS:0 14 XTSM:5/XTS:1 14 XTSM:5/XTS:2 14 XTSM:6/XTS:0 21 XTSM:6/XTS:1 21 XTSM:6/XTS:2 21 XTSM:7/XTS:0 29 XTSM:7/XTS:1 29 XTSM:7/XTS:2 29 XTSM:8/XTS:0 14 XTSM:8/XTS:1 21 XTSM:9/XTS:0 21 XTSM:9/XTS:1 21 XTSM:9/XTS:2 21 XTSM:10/XTS:0 14 XTSM:10/XTS:1 14 XTSM:10/XTS:2 14 XTSM:11/XTS:0 14 XTSM:11/XTS:1 14 XTSM:11/XTS:2 14 XTSM:12/XTS:0 14 XTSM:12/XTS:1 14 XTSM:12/XTS:2 14 XTSM:13/XTS:0 29 XTSM:13/XTS:1 29 XTSM:13/XTS:2 29 XTSM:14/XTS:0 29 XTSM:14/XTS:1 29 XTSM:15/XTS:0 29 XTSM:15/XTS:1 29 XTSM:15/XTS:2 29 XTSM:16/XTS:0 29 XTSM:16/XTS:1 29 XTSM:16/XTS:2 29 XTSM:17/XTS:0 29 XTSM:17/XTS:1 29 XTSM:17/XTS:2 29 XTSM:18/XTS:0 29 XTSM:18/XTS:1 29 XTSM:18/XTS:2 29 XTSM:19/XTS:0 29 XTSM:19/XTS:1 29 XTSM:19/XTS:2 29 XTSM:21/XTS:0 29 XTSM:21/XTS:1 29 XTSM:21/XTS:2 29 XTSM:22/XTS:0 29 XTSM:22/XTS:1 29 XTSM:22/XTS:2 29 XTSM:23/XTS:0 29 XTSM:23/XTS:1 29 XTSM:23/XTS:2 29 XTSM:24/XTS:0 29 XTSM:24/XTS:1 29 XTSM:24/XTS:2 29 XTSM:25/XTS:0 29 XTSM:25/XTS:1 29 XTSM:25/XTS:2 29 XTSM:26/XTS:0 14 XTSM:26/XTS:1 14 XTSM:26/XTS:2 14 XTSM:28/XTS:0 15 XTSM:28/XTS:1 15 XTSM:28/XTS:2 15 XTSM:29/XTS:0 13 XTSM:29/XTS:1 13 XTSM:29/XTS:2 13 XTSM:30/XTS:0 14 XTSM:30/XTS:1 14 XTSM:31/XTS:0 14 XTSM:31/XTS:1 13 XTSM:31/XTS:2 13 XTSM:32/XTS:0 13 XTSM:32/XTS:1 14 XTSM:32/XTS:2 13 XTSM:33/XTS:0 14 XTSM:33/XTS:1 14 XTSM:33/XTS:2 14 XTSM:34/XTS:0 14 XTSM:34/XTS:1 14 XTSM:34/XTS:2 14 XTSM:35/XTS:0 29 XTSM:35/XTS:1 29 XTSM:35/XTS:2 29 XTSM:36/XTS:0 29 XTSM:36/XTS:1 21 XTSM:36/XTS:2 21 XTSM:37/XTS:0 14 XTSM:37/XTS:1 14 XTSM:37/XTS:2 14 XTSM:38/XTS:0 14 XTSM:38/XTS:1 14 XTSM:38/XTS:2 14 XTSM:39/XTS:0 21 XTSM:39/XTS:1 21 XTSM:39/XTS:2 21 XTSM:40/XTS:0 29 XTSM:40/XTS:1 29 XTSM:40/XTS:2 7 XTSM:41/XTS:0 29 XTSM:41/XTS:1 29 XTSM:41/XTS:2 29

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      相关资源
      最近更新 更多