与用户互动

1.java程序的入口,main()方法——public static void main(String[] args){}

1)public修饰符:java类由JVM调用,为了让JVM可以自由的调用这个main()方法,所以使用public修饰符。

2)static修饰符:JVM调用这个主方法时,不会先创建该主类的对象。

3)void返回值:因为该方法被JVM调用,该方法的返回值返回给JVM,这里面没有意义。

根据方法调用规则:谁调用方法,谁负责为形参赋值。那么JVM怎么知道如何为args赋值呢?

public class argstest{
	public static void main(String[] args){
		System.out.println(args.length);	//args的长度
		for(String arg:args){				//进行循环遍历,查看args的内容
			System.out.println(arg);
		}
	}
}

从上面的代码可以看出,args默认是空的。如果运行java程序时在类名后紧跟一个或多个字符串(多个字符串之间以空格隔开),JVM就会把这些字符串依次赋值给args数组。如

java argstest  java test    如果参数本身加了空格,可以用"",这样JVM就会把这个空格也算进参数里。如 java argstest "java test"


2.使用Scanner类可以很方便地获取用户的键盘输入。Scanner主要提供了两个方法来扫描输入。

1)hasNextXxx():是否还有下一个输入项,其中Xxx可以死Int、Long等代表基本数据类型的字符串。如果只是判断是否包含下一个字符串,则直接使用hasNext()。

2)nextXxx():获取下一个输入项。

在默认情况下,Scanner使用空白(包括空格、tab空白、回车)作为多个输入项之间的分隔符。

import java.util.Scanner;       	//记得要导入Scaner类
public class scannertest{
	public static void main(String[] args){
		Scanner sr = new Scanner(System.in);//创建一个Scanner类对象sr,System.in代表键盘输入
		while(sr.hasNext()){		//判断是否还有下一个输入项
			System.out.println("键盘输入的内容是"+sr.next());
		}
	}
}
如果希望改变Scanner的分隔符,可以使用useDelimiter()方法来定义新的分隔符。

Scanner的读取操作可能被阻赛来等待信息的输入。如果输入源没有结束,Scanner又读不到更多输入项时(尤其在键盘输入时比价常见),Scanner的hasNext()和next()方法都有可能阻塞,hasNext()方法是否阻塞与和其相关的next()方法是否阻塞无关。

import java.util.Scanner;
public class test56{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		sc.useDelimiter("\t");               //以tab键结束当前的输出
		while(sc.hasNext()){
			System.out.println("不阻塞部分");
			System.out.println("阻塞部分"+sc.next());      //即使hasNext()返回了true,next()方法是也可能造成阻塞
		}
	}//比如输入"天赋影响上限+tab+努力决定下限"会输出"...天赋影响上限"而"...努力决定下限"被阻塞了,因为此时还在等待输入,并没有扫描到tab,所以此时输入
}        //还没有结束

3)Scanner提供了两个简单的方法来逐行读取。

boolean hasNextLine():返回输入源中是否还有下一行。

String nextLine():返回输入源中下一行的字符串。

关于next()方法和nextLine()方法的区别,可以看这里点击打开链接

import java.util.Scanner;
public class scannertest2{
	public static void main(String[] args){
		String s1,s2;
		Scanner sc = new Scanner(System.in);
		System.out.println("输入第一个字符串");
		s1=sc.next();
		//s2=sc.nextLine();
		System.out.println("第一个字符串是"+s1);
		System.out.println("输入第二个字符串");
		s2=sc.nextLine();
		System.out.println("第二个字符串是"+s2);
		System.out.println("第一和第二字符串的内容是"+s1+s2);
	}
}

上面代码中,运行程序,输入a b c d+回车,会输出


其原因是因为nextLine()方法自动读取了next()方法去掉的Enter作为结束符,所以无法给s2从键盘获取输入值。如果要解决,可以在s1=sc.next();后加s2=sc.nextLine();

4)Scanner不仅可以获取字符串输入,也可以获取任何基本类型的输入项,如

import java.util.Scanner;
public class scannertest3{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		while(sc.hasNextLong()){     	//判断是否还有下一个Long型的数据。如果没有,直接跳出。
			System.out.println("键盘输入的内容是"+sc.next());
		}
	}
}

5)Scanner不仅能读取用户的键盘输入,还可以读取文件输入

import java.util.Scanner;
import java.io.*;   //记得导入这个包
public class scannertest4{
	public static void main(String[] args)throws Exception{
		Scanner sc = new Scanner(new File("scannertest4.java"));  //将一个File对象作为Scannner的构造器参数,Scanner读取文件内容
		System.out.println("scannertest4.java文件内容如下");
		sc.useDelimiter("/n");
		while(sc.hasNext()){
			System.out.println(sc.next());  //必须使用nextLine()方法获取整行输出
		}                                   //如果使用next()方法,那么就会把空格和tab也当作分割符,那么这时就要用useDelimiter("/n")
	}                                       
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值