Scanner与循环
用户交互Scanner
hasnext()与next()
hasNextInt() 和 nextInt() 都是 Scanner 类的方法,其中:
hasNextInt()方法是用于判断下一个输入是否是int型数据。如果是,则返回true,否则返回false。调用该方法并不会将输入从缓冲区中移除。nextInt()方法是用于读取下一个int类型的输入数据。如果缓冲区中下一个输入是一个有效的int类型的值,则读取该值,并返回。如果下一个输入不能解释为int类型,则抛出InputMismatchException异常。
因此,这两个方法常常会被一起使用,以此来确保下一个输入是一个有效的 int 类型数据。通常的使用方法是先调用 hasNextInt() 方法,如果其返回值为 true,则可以调用 nextInt() 方法来获取输入数据。如果返回值为 false,则需要提示用户输入格式不正确,并可能需要再次进行输入操作。
使用next()接收
- 一定要读取到有效字符后才能结束
- 以空白为结束符
- next()不能得到带有空格的字符串
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner=new Scanner(System.in);
//类名 对象名
System.out.println("使用nexe方式接收:");
//判断用户有没有输入字符串
if(scanner.hasNext()){
//使用next方式接收
String str=scanner.next();
System.out.println("输出的内容为:"+str);
}
//凡是IO流的类如果不关闭会一直占用资源,养成良好习惯用完就关
scanner.close();
}
}
使用nextLine()接收
- 以Enter为结束符,也就是说返回的是回车之前的所有字符
- 可以获得空白
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接收:");
if(scanner.hasNextLine()){
String str=scanner.nextLine();
System.out.println("输出内容为:"+str);
}
scanner.close();
}
}
使用if判断
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int i=0;
float f=0.0f;
System.out.println("请输入整数:");
//如果输入的是整数
if(scanner.hasNextInt()) {
i = scanner.nextInt();
System.out.println("整数数据:"+i);
}else{
System.out.println("输入的不是整数数据!");
}
//如果输入的是小数
System.out.println("请输入小数:");
if(scanner.hasNextFloat()) {
f = scanner.nextFloat();
System.out.println("小数数据:"+f);
}else{
System.out.println("输入的不是小数数据!");
}
scanner.close();
}
}
执行结果:
请输入整数: 10.1 输入的不是整数数据! 请输入小数: 小数数据:10.1
这是因为 scanner.hasNextFloat() 方法会检查输入的下一个标记是否可以解释为 float 类型,如果可以,则读取并返回该标记。如果不能,则该方法不会等待输入者输入,而是会立即返回 false。在这个例子中,首先会读取用户输入的整数数据,如果该数据是整数,则使用 nextInt() 方法读取并返回该整数数据。而如果该输入数据不是整数类型,则直接输出提示信息 "输入的不是整数数据!",不会阻塞等待用户输入,因此在输入了 10.1 之后,由于该值并不是整数类型,所以直接输出 "输入的不是整数数据!",然后会进入下一个判断条件,此时因为已经输入了 10.1,所以该值仍然会被视为 float 类型,并且直接输出 "小数数据:10.1"。因此,你输入一个小数 10.1 后,只会输出一次 "小数数据:10.1",而不会让你重新输入。
if实例
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str=scanner.nextLine();
if(str.equals("Hello"))//判断字符串是否等于指定的
{
System.out.println("true");
}
else
{
System.out.println("end");
}
}
}
使用while循环
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
//输入多个数字,并求其总和与平均数,每次输入一个数用回车确认,通过输入非数字来结束输入并输出结果
Scanner scanner = new Scanner(System.in);
double sum=0;
int m=0;
while(scanner.hasNextDouble()){
double x=scanner.nextDouble();
m++;
sum+=x;
System.out.println("你输入了第"+m+"个数,当前结果sum="+sum);
}
System.out.println(m+"个数的和为:"+sum);
System.out.println(m+"个数的平均值为:"+(sum/m));
scanner.close();
}
}
常规for循环
public class Demo99 {
public static void main(String[] args) {
int i,j;
for(i=1;i<10;i++) {
for(j=1;j<=i;j++) {
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
System.out.println();
}
}
}
增强型for循环
public class Demo4 {
public static void main(String[] args) {
int [] nums={10,20,30,40,50};
//增强型for循环,主要用于数组或集合
for(int x:nums)
{
System.out.println(x);
}
}
}
输出:
10 20 30 40 50
用for循环打印菱形
public class Tran {
public static void main(String[] args) {
int n=5;
for(int i=1;i<=n;i++){
for(int j=1;j<=n-i;j++){
System.out.print(" ");
}
for(int k=1;k<=2*i-1;k++)
{
System.out.print("*");
}
System.out.println();
}
for(int i=n-1;i>=1;i--){
for(int j=1;j<=n-i;j++){
System.out.print(" ");
}
for(int k=1;k<=2*i-1;k++)
{
System.out.print("*");
}
System.out.println();
}
}
}
浙公网安备 33010602011771号