Java解题-杭电OJ-1001题-Sum Problem
题目描述
问题描述
嘿,欢迎来到HDOJ(杭州电子科技大学在线评委)。
在这个问题中,您的任务是计算SUM(n)= 1 + 2 + 3 + … + n。
输入
输入将由一系列整数n组成,每行一个整数。
产量
对于每种情况,在一行中输出SUM(n),后跟一个空行。您可以假设结果将在32位有符号整数的范围内。
样本输入
1
100
样本输出
1
5050
运行代码:
import java.util.Scanner;
public class HD1001 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num;
while(sc.hasNext()) {
num = sc.nextInt();
System.out.println(num);
System.out.println(sum(num));
System.out.println();
}
}
public static int sum(int num) {
int sum =0;
for (int i = 1; i <= num; i++) {
sum+=i;
}
return sum;
}
}
关于Scanner的hasNext()方法
实例
public void hasNestTest1() {
System.out.println("请输入几个单词,以空格作为分隔");
Scanner sc = new Scanner(System.in);
while(sc.hasNext())
{
System.out.println("你刚刚输入的内容是:"+ sc.next());
}
System.out.println("执行了吗?");
}
运行结果:
我们可以看到这里的输入光标在闪动,期待你的再次输入!
执行原理
hasNext()在缓冲区中依次扫描单词,分别返回true,然后再执行打印输出。扫描到空时返回false,退出while循环,最后执行“执行了吗”语句。但是通过API发现不是这样的。
**方法解释:**如果此扫描器的输入(缓冲区)中有另一个token(输入的字符或数字),则返回true。what? 根本没有提到什么时候返回false。其实执行过程是这样的:当执行到hasNext()时,它会先扫描缓冲区中是否有字符,有则返回true,继续扫描。直到扫描为空,这时并不返回false,而是将方法阻塞,等待你输入内容然后继续扫描。
解决方法
使用带有参数的重载方法,当扫描到的字符与参数值匹配时返回true
测试代码:
public void hasNestTest2() {
System.out.println("请输入几个单词,以空格作为分隔");
Scanner sc = new Scanner(System.in);
while(!sc.hasNext("$")) //匹配#返回true,然后取非运算。即以#为结束符号
{
System.out.println("键盘输入的内容是:"+ sc.next());
}
System.out.println("执行了吗?");
}
运行效果: