我的计数器没有增加并在 java 中保持为 1
My counter does no increase and stays as 1 in java
我觉得我的代码中可能遗漏了一些阻止我的计数器增加的东西。有人可以检查一下我可能遗漏了什么吗,我的计数器值保持为 1。
代码:
public static void count_vowels(String in_file)
{
{
File temp = new File(in_file);
Scanner input_file;
try
{
input_file = new Scanner(temp);
}
catch (Exception e)
{
System.out.printf("Failed to open file %s\n", in_file );
return;
}
while(input_file.hasNextLine())
{
String line = input_file.nextLine();
System.out.printf("%s\n", line);
for(int i = 0; i<line.length(); i++)
{
char aA = line.charAt(i);
int counta = 0;
if(aA == 'a' || aA == 'A')
{
counta++;
System.out.println(counta);
}
}
}
input_file.close();
}
}
程序调用一个包含 3 行文本的文件。我添加了 2 个打印语句来显示行,并且在每行下方打印了计数器的值。结果是:
The CAT is jumping over an airplane.
1
1
1
1
TODAY IS WEDNESDAY.
1
1
UUUu
好像在计数,但没有递增。
将此行移出循环
int counta = 0;
int counta = 0;
在 for 循环外声明这一行
while(input_file.hasNextLine())
{
String line = input_file.nextLine();
System.out.printf("%s\n", line);
int counta = 0;
for(int i = 0; i<line.length(); i++)
{
char aA = line.charAt(i);
if(aA == 'a' || aA == 'A')
{
counta++;
System.out.println(counta);
}
}
}
从 for 循环中减去计数
int counta = 0;
每次处理行时重置为 0。
移出 for-loop
修改后的代码
while(input_file.hasNextLine())
{
String line = input_file.nextLine();
System.out.printf("%s\n", line);
int counta = 0; // moved outside
for(int i = 0; i<line.length(); i++)
{
char aA = line.charAt(i);
if(aA == 'a' || aA == 'A')
{
counta++;
System.out.println(counta);
}
}
}
这是你的问题:你的 counta
变量在每次循环调用后都会重新初始化,因为它只存在于循环范围内。
while(input_file.hasNextLine()) {
String line = input_file.nextLine();
System.out.printf("%s\n", line);
int counta = 0; // Move this here if you want to count every a in each line
for(int i = 0; i<line.length(); i++) {
char aA = line.charAt(i);
if(aA == 'a' || aA == 'A') {
counta++;
System.out.println(counta);
}
}
}
我把它移到了外面,让计数器增加了。从这里我怎么能让计数器逐行继续而不是让它在每行之后重新启动。在第一行之后,它计算了 "a" 的 x 数量,但它在下一行恢复为 0。
你的问题是,你就在这里:
for(int i = 0; i<line.length(); i++)
{
char aA = line.charAt(i);
int counta = 0;
...
你的循环被执行的次数与你的行中的字符一样多。因此,对于您的程序声明的每个字符 counta
并将其初始化为 0
。对于每个循环,您都会创建一个 "new" 变量,其值始终为 0
。
如果你点击你想要的字符(A
和 a
在你的情况下),你的增量 counta
并打印出来。第一次没问题,但是对于每一个进一步的循环,你的 porgramm 都在声明 counta
并用 0
.
初始化它
解决方法很简单:
从循环中获取声明和初始化:
...
while(input_file.hasNextLine())
{
String line = input_file.nextLine();
System.out.printf("%s\n", line);
//Counta need to be placed right here:
int counta = 0;
for(int i = 0; i<line.length(); i++)
{
char aA = line.charAt(i);
//Counta was here before but thats wrong
if(aA == 'a' || aA == 'A')
{
counta++;
System.out.println(counta);
}
}
}
...
我希望我现在能够帮助你更好地理解你的问题。
我觉得我的代码中可能遗漏了一些阻止我的计数器增加的东西。有人可以检查一下我可能遗漏了什么吗,我的计数器值保持为 1。
代码:
public static void count_vowels(String in_file)
{
{
File temp = new File(in_file);
Scanner input_file;
try
{
input_file = new Scanner(temp);
}
catch (Exception e)
{
System.out.printf("Failed to open file %s\n", in_file );
return;
}
while(input_file.hasNextLine())
{
String line = input_file.nextLine();
System.out.printf("%s\n", line);
for(int i = 0; i<line.length(); i++)
{
char aA = line.charAt(i);
int counta = 0;
if(aA == 'a' || aA == 'A')
{
counta++;
System.out.println(counta);
}
}
}
input_file.close();
}
}
程序调用一个包含 3 行文本的文件。我添加了 2 个打印语句来显示行,并且在每行下方打印了计数器的值。结果是:
The CAT is jumping over an airplane.
1
1
1
1
TODAY IS WEDNESDAY.
1
1
UUUu
好像在计数,但没有递增。
将此行移出循环
int counta = 0;
int counta = 0;
在 for 循环外声明这一行
while(input_file.hasNextLine())
{
String line = input_file.nextLine();
System.out.printf("%s\n", line);
int counta = 0;
for(int i = 0; i<line.length(); i++)
{
char aA = line.charAt(i);
if(aA == 'a' || aA == 'A')
{
counta++;
System.out.println(counta);
}
}
}
从 for 循环中减去计数
int counta = 0;
每次处理行时重置为 0。
移出 for-loop
修改后的代码
while(input_file.hasNextLine())
{
String line = input_file.nextLine();
System.out.printf("%s\n", line);
int counta = 0; // moved outside
for(int i = 0; i<line.length(); i++)
{
char aA = line.charAt(i);
if(aA == 'a' || aA == 'A')
{
counta++;
System.out.println(counta);
}
}
}
这是你的问题:你的 counta
变量在每次循环调用后都会重新初始化,因为它只存在于循环范围内。
while(input_file.hasNextLine()) {
String line = input_file.nextLine();
System.out.printf("%s\n", line);
int counta = 0; // Move this here if you want to count every a in each line
for(int i = 0; i<line.length(); i++) {
char aA = line.charAt(i);
if(aA == 'a' || aA == 'A') {
counta++;
System.out.println(counta);
}
}
}
我把它移到了外面,让计数器增加了。从这里我怎么能让计数器逐行继续而不是让它在每行之后重新启动。在第一行之后,它计算了 "a" 的 x 数量,但它在下一行恢复为 0。
你的问题是,你就在这里:
for(int i = 0; i<line.length(); i++)
{
char aA = line.charAt(i);
int counta = 0;
...
你的循环被执行的次数与你的行中的字符一样多。因此,对于您的程序声明的每个字符 counta
并将其初始化为 0
。对于每个循环,您都会创建一个 "new" 变量,其值始终为 0
。
如果你点击你想要的字符(A
和 a
在你的情况下),你的增量 counta
并打印出来。第一次没问题,但是对于每一个进一步的循环,你的 porgramm 都在声明 counta
并用 0
.
解决方法很简单:
从循环中获取声明和初始化:
...
while(input_file.hasNextLine())
{
String line = input_file.nextLine();
System.out.printf("%s\n", line);
//Counta need to be placed right here:
int counta = 0;
for(int i = 0; i<line.length(); i++)
{
char aA = line.charAt(i);
//Counta was here before but thats wrong
if(aA == 'a' || aA == 'A')
{
counta++;
System.out.println(counta);
}
}
}
...
我希望我现在能够帮助你更好地理解你的问题。