java - 字符串数组大小和 for 循环访问元素

标签 java arrays string for-loop logic

这是一个与问题相关的问题。在 codechef( https://www.codechef.com/problems/FRK ) 上。我不明白为什么我需要将 String 数组的大小增加 1 并运行小于等于(<=)而不是小于(<)的循环来访问数组中的每个元素。

  int nooffriends=0;
  Pattern p = Pattern.compile("[^A-Za-z0-9.]");
  Scanner scan = new Scanner(System.in);
  int noofUsers=scan.nextInt();

  if(noofUsers<1||noofUsers>5000)
      return;
  String array[]=new String[noofUsers+1];  //need to increase this size to get correct answer
  for(int i=0;i<=noofUsers;i++){     //had to put '<=' instead '<'(why)
      array[i]=scan.nextLine();

//    if(array[i].charAt(0)<89||array[i].charAt(0)>122)
//      return;
      Matcher m = p.matcher(array[i]);

      if (m.find())
        break;
      if(array[i].contains("ch")||array[i].contains("he")||array[i].contains("ef"))
      nooffriends++;
  }
  System.out.print(nooffriends);

} }

最佳答案

问题是,当您扫描 nextInt() 时,您不会终止该行。因此,下次调用 nextLine() 实际上会读取输入的同一行。如果检查数组的内容,您将看到 [0] 元素为空。另外,如果您在循环中打印 i,您将看到它允许您在第一个元素上输入,并且跳过 0 个元素。

为了修复它,在 nextInt() 之后添加一个 scan.nextLine() ,它将按预期工作:

    System.out.print("Number of users:");
    int noofUsers = scan.nextInt();
    scan.nextLine(); //Add that!

    if (noofUsers < 1 || noofUsers > 5000)
        return;
    String array[] = new String[noofUsers]; 
    for (int i = 0; i < noofUsers; i++) { 
        System.out.print("Scan:["+i+"]");
        array[i] = scan.nextLine();

        Matcher m = p.matcher(array[i]);

        if (m.find())
            break;
        if (array[i].contains("ch") || array[i].contains("he") || array[i].contains("ef"))
            nooffriends++;
    }

另一个更简单的解决方案是:

  for (int i = 0; i <= noofUsers; i++) { 
        String currentMember=scan.nextLine();
        Matcher m = p.matcher(currentMember);
        if (m.find())
            break;
        if (currentMember.contains("ch") || currentMember.contains("he") || currentMember.contains("ef"))
            nooffriends++;
    }

您不需要将所有答案存储在数组中。您可以只使用当前的操作,然后忘记它;)

关于java - 字符串数组大小和 for 循环访问元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51929065/

相关文章:

java - 包装应用程序以在 Ubuntu Linux 中创建 sh 文件

java - 删除 View 的子级然后读取它后, View 将无法正常显示

mysql模式匹配两个不同表中的前5个字符,然后将数据输入到单独的列中

python - 如何返回仅对应于特定日期的字符串中分号后的数字?

c++ - 弃用从字符串常量到 'char*' 的转换 : Can't use the constant

java - 如何追踪用户观看习惯

java - 我正在尝试从广播接收器发出 API 请求,有人能提到正确的方法吗?

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

PHP mysqli 只显示一个用户

javascript - 解析 Javascript 数组