字符串数组大小和用于访问元素的 for 循环
Posted
技术标签:
【中文标题】字符串数组大小和用于访问元素的 for 循环【英文标题】:String array size and for loop to access element 【发布时间】:2019-01-26 11:37:19 【问题描述】:所以这是一个与问题有关的问题。在 codechef (https://www.codechef.com/problems/FRK) 上。我不知道为什么我需要将字符串数组的大小增加 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() 从上一次调用 nextInt() 中读取新行。只需在循环之前添加一个额外的 nextLine() 就可以了 或者总是使用 nextline() 然后解析为 int 【参考方案1】:问题在于,当您扫描 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++;
您不需要将所有答案存储在一个数组中。您可以只使用当前的操作然后忘记它;)
【讨论】:
我很高兴能帮上忙。您可以随时投票或接受答案;)【参考方案2】:我认为是因为这条线
int noofUsers=scan.nextInt();
我不确定您的输入文件格式。但如果它看起来像这样:
123\n
xxxxx\n
xxxx\n
函数 'nextInt' 只得到 123。而其他文本是:
\n
xxxxxx\n
xxxxxx\n
如果你想进入下一行,你需要读一个\n。 因此,您需要运行一个额外的 nextLine() 来获取 nextLine。
【讨论】:
以上是关于字符串数组大小和用于访问元素的 for 循环的主要内容,如果未能解决你的问题,请参考以下文章