我是一个初学者,我从别人的问题中学到的东西尝试了几种不同的方法,但是我认为以下问题的问题是我无法弄清楚代码的逻辑。如果有人可以提出一种解释代码逻辑的解决方案,我将不胜感激。我应该以method()的格式创建一个方法,该方法将提示用户输入包含字符串,数字和双精度数的脚本。该方法应计算字符串,数字和双精度数的数量,并打印出字符串,数字和双精度数的列表。我知道该方法会打印字符串,数字和双精度字符的列表,但似乎我无法获得计数器来对它们进行计数。到目前为止,我已经知道了:
import java.util.Scanner;
public class Games {
private Scanner input;
public Games() {
input = new Scanner(System.in);
}
public void textParser() {
System.out.println("Enter a Script");
int intCount = 0;
int dblCount = 0;
int strCount = 0;
while(input.hasNext()) {
if(input.hasNextInt()) {
int num = input.nextInt();
System.out.println(num);
intCount++;
}else if(input.hasNextDouble()) {
double value = input.nextDouble();
System.out.println(value);
dblCount++;
}else {
String oneWord = input.next();
System.out.println(oneWord);
strCount++;
}
}
System.out.println("Number of integers: " + intCount);
System.out.println("Number of doubles: " + dblCount);
System.out.println("Number of strings: " + strCount);
}
public static void main(String[] args) {
Games demo = new Games();
demo.textParser();
}
}
预期的输入和输出示例:
Enter a Script
32 quick brown foxes jump over 65 lazy dogs and few doubles are 43.3
and 76.9
32
65
Number of integers: 2
43.3
76.9
Number of doubles: 2
quick
brown
foxes
jump
over
lazy
dogs
and
few
doubles
are
and
Number of strings: 12
实际输出:
32
65
43.3
76.9
quick
brown
foxes
jump
over
lazy
dogs
and
few
doubles
are
and
[在开头附近,您说while(scanner.hasNext()
。这意味着,只要程序运行,循环中的所有代码都会被执行。
您已经将打印计数器的语句放在循环之外,并以某种方式设计了代码,使您永远不会离开该循环。
所以您需要某种退出条件。假设,如果其中一个字符串为exit
,则退出循环并打印计数器:
while (input.hasNext()) {
if (input.hasNextInt()) {
// ...
} else if (input.hasNextDouble()) {
// ...
} else {
String oneWord = input.next();
System.out.println(oneWord);
strCount++;
if (oneWord.equals("exit")) {
input.close();
break;
}
}
}
扫描程序将继续读取,直到找到“文件结尾”条件。