【问题标题】:How to print statement outside loop to avoid duplicates?如何在循环外打印语句以避免重复?
【发布时间】:2013-08-09 23:51:50
【问题描述】:

我希望我的打印语句位于循环之外,这样该语句就不会一遍又一遍地打印相同的内容。下面的 for 循环只是将一个数组中的一个数字与另一个数组进行比较,以找出找到了多少匹配项。定义上面的变量并打印下面的语句会导致“变量未初始化错误”,这是可以理解的。

for (int i = 0; i < 6; i++)
{
    int chkNum = myArray[i];
    int lottMtch = count(chkNum, rndNum);

    if (lottMtch > 0)
    {
        System.out.println(lottMtch + "matches found");
        System.out.print(chkNum);
    }
    else {
        System.out.print("no matches found");
    }
}

【问题讨论】:

  • 在哪一行和哪个变量处出错?你能完整打印那个错误声明吗?
  • 如果您不想打印每次迭代,请将 print 语句移出循环。如果您需要循环内的值来执行打印,则必须将该值分配给在循环外声明的变量。
  • 错误是“局部变量 chkNum 和 lottMtch 可能已被初始化”。发生这种情况是因为它们是在循环之外声明的。

标签: java loops for-loop


【解决方案1】:

在循环之前声明变量,然后在循环中执行您的操作,例如如果找到变量,则将其添加到变量中,然后如果大于 0 则将其打印出来。像这样...

int var = 0;
for(...) {
   if(found)
       var++;
}
if(var > 0)
    sysout(var);

当然,这段代码不起作用,但它是一个开始。为了您的学习经验,我会让您用您的代码实现这个想法。

【讨论】:

  • 打印匹配数,但有两个问题。首先,每次不匹配时都不会打印匹配项,如果根本没有匹配项,我只想要这个。其次,chkNum 没有解决方案。
【解决方案2】:

这真的没有意义.. 如果你想试试这个...

        int lottMtch[]=new int[myArray.length];
           Arrays.fill(lottMtch, 0);
            for (int i = 0; i < 6; i++)
            {
                int chkNum = myArray[i];
               lottMtch[i] = count(chkNum, rndNum);

            }
            for (int i = 0; i < 6; i++)
            {
                       if (lottMtch[i] > 0)  
                            System.out.println(lottMtch[i] + " matches found "+ myArray[i]);
            }

如果你想知道rndNummyArray 中有多少匹配项,那就试试这个

这里我假设rndNmglobal

        int lottMtch=0;

            for (int i = 0; i < 6; i++)
            {

               lottMtch += count(myArray[i], rndNum);

            }

                       if (lottMtch> 0)  
                            System.out.println(lottMtch + " matches found "+ rndNum);

根据评论中的讨论试试这个..

Map<Integer,Integer> map = new HashMap<Integer,Integer>();


       for (int i = 0; i < 6; i++)
         {
             Integer chkNum = myArray[i];
            Integer cnt = (Integer)count(myArray[i], rndNum);
              if(cnt>0)
              {
                  if(map.get(chkNum)==null)
                     map.put(chkNum,1);
                  else
                     map.put(chkNum, map.get(chkNum)+1);
              }

         }

         for (Object key : map.keySet()) 
             System.out.println(map.get(key) + " matches found "+key.toString());

【讨论】:

  • 不是很懂,但是可以。打印匹配的数量和匹配的数字。唯一的问题是我宁愿有一个声明,其中包含找到的匹配数和一行中的实际数字。
  • 你能举个例子吗?
  • 您是否尝试在myArray 中找到与rndNum 匹配的数量?所以如果rndNum=23myarry={11,23,33,23} 那么你需要像2 matches found of 23 这样的输出。如果您需要这样的东西,我已经再次编辑了我的答案
  • 是的,但是 rndNum 有六个数字。这就是我从你之前的回答中得到的:code 1 matches found 23 1 matches found 23。我想:code 2 matched found 23.
  • 所以rndNum 是数组?? .和你这样的方法public int count(int nub ,int []rndNum)
【解决方案3】:

这是因为如果你只在循环之上声明变量并且只在循环中初始化所述变量,当你试图在循环之外打印它们时,不能保证它们会被初始化。

所以,也许你想要这样的东西:

int lottMtch = 0;

for (int i = 0; i < 6; i++)
{
    int chkNum = myArray[i];
    lottMtch += count(chkNum, rndNum);
    //System.out.print(chkNum); this would not really make sense outside of the loop
}

if (lottMtch > 0)
{
    System.out.println(lottMtch + "matches found");
}
else 
{
    System.out.print("no matches found");
}

【讨论】:

  • 比较 for 循环之外的 lottMuch 变量似乎没有任何意义,因为它的值将取决于循环的最后一次迭代
  • @OnurA。通过将其初始化为 0 然后在循环中添加 count() 来修复它。
  • 好答案。 +1 换 +1? ;)
  • @ethio 这是故意的。在循环之外打印它是没有意义的。
【解决方案4】:

如果你打算在循环退出后访问它,你需要在循环外声明一个变量。

【讨论】:

    【解决方案5】:

    您需要在循环外初始化变量。试试这个:

    int chkNum = 0;
    int lottMtch = 0;
    
    for (int i = 0; i < 6; i++)
    {
        chkNum = myArray[i];
        lottMtch = count(chkNum, rndNum);
    
    }
    
    if (lottMtch > 0)
    {
        System.out.println(lottMtch + "matches found");
        System.out.print(chkNum);
    }
    else {
        System.out.print("no matches found");
    }
    

    【讨论】:

    • 不仅如此,这是个坏建议。他说“初始化”,但没有。
    猜你喜欢
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多