Scanner s = new Scanner(System.in);
基本用法:
- new一个Scanner对象封装成scanner对象
Scanner scanner = new Scanner(System.in);创建一个对象接受用户键盘输入
String str = scanner.nextLine();关闭资源
scanner.close();
next():
4. 一定要读取到有效的字符后才可以结束输入
5. 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
6. 只有输入有效字符后才能将其后面输入的空白作为分隔符或者结束符
7. next()不能得到有空白的字符串
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判断用户有没有输入字符串
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();
}
}
普通方式:
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
//从键盘接受数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
String str = scanner.nextLine();
System.out.println("输出内容为:"+str);
scanner.close();
}
}
键盘输入:
import java.util.Scanner;
public class Deom04 {
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("输出的不是小数数据!");
}
}
}
拓展:
输入多个数字,求总和和平均数,输入非数字来结束输入。
public class Demo05 {
public static void main(String[] args) {
//输入多个数字,求总和和平均数,输入非数字来结束输入
Scanner scanner = new Scanner(System.in);
//和
double sum = 0;
//计算输入了多少个数字
int m =0;
System.out.println("请输入数据:");
//通过循环判断是否输入,并且在里面对每一次进行求和和统计
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
m++;
sum = sum + x;
System.out.println("你输入了第"+m+"个数据,然后当前结果为sum="+sum);
}
System.out.println(m+"个数的和为"+sum);
System.out.println(m+"个数的平均值为"+(sum/m));
scanner.close();
}
}
顺序结构
它是何一个算法都离不开的基本算法结构
选择结构 if单选择结构import java.util.Scanner;
public class ifDemo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String s = scanner.nextLine();
//equals:判断字符串是否相等
if (s.equals("hello")){
System.out.println(s);
}
System.out.println("End");
scanner.close();
}
}
if双选择结构
import java.util.Scanner;
public class ifDemo02 {
//考试分数大于60则及格,小于60则不及格
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入分数:");
if(scanner.hasNextInt()){
int score = scanner.nextInt();
if(score>=60){
System.out.println("及格!");
}else{
System.out.println("不及格!");
}
}
scanner.close();
}
}
if多选择结构
import java.util.Scanner;
public class ifDemo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入分数:");
if(scanner.hasNextInt()){
int score = scanner.nextInt();
if(score==100){
System.out.println("恭喜满分!");
}else if(score<100 && score>=90){
System.out.println("A级");
}else if(score<90 && score>=80){
System.out.println("B级");
}else if(score<80&&score>=70){
System.out.println("C级");
}else if(score<70&&score>=60){
System.out.println("D级");
}else if(score<60 && score>=0){
System.out.println("不及格!");
}else{
System.out.println("成绩不合法!");
}
}
scanner.close();
}
}
嵌套的if选择结构
switch多选择结构
switch变量可以是:
byte、short、int或者char从Java SE 7开始switch支持字符串String类型了同时case标签必须为字符串常量或字面量
public static void main(String[] args) {
//case穿透
char grade = 'B';
switch (grade){
case 'A':
System.out.println("优秀");
break; //可选
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("及格");
break;
case 'D':
System.out.println("再接再厉");
break;
case 'E':
System.out.println("挂科");
break;
default:
System.out.println("未知等级");
break;
}
}
String类型
public class structDemo02 {
public static void main(String[] args) {
String name = "Yuki";
//JDK新特性,表达式是字符串!!!
//字符的本质是数字
//反编译 java-->class(字节码文件)-->反编译(IDEA)
switch (name){
case "Yuki":
System.out.println("Yuki");
break;
case "wang":
System.out.println("wang");
break;
default:
System.out.println("未知");
break;
}
}
}
循环结构
while循环
while(i<100){
i++;
System.out.println(i);
}
先判断再执行
do…while循环do{
sum = sum + i;
i++;
}while(i<=100)
先执行再判断,即使满足条件,也至少要执行一次。
for循环// 初始化 条件判断 迭代
for(int i =1; i<100; i++){
System.out.rintln(i);
}
for循环特点:
- for循环是最有效、最灵活的循环结构for循环执行的次数在执行前就确定了
//死循环
for(;;){}
练习
练习1:用while或for实现for循环输出1-1000之间能被5整除的数,并且每行输出三个
public static void main(String[] args) {
for (int i = 0; i<=1000; i++){
if(i%5==0){
System.out.print(i+"t"); //"t"制表符
}
if(i%(5*3)==0){
System.out.println();
//System.out.print("n"); //换行
}
}
//println 输出完全换行
//print 输出不完全换行
}
练习2:打印9*9乘法表
问题的拆分思想:
- 我们先打印第一列把固定的1再用一个循环包起来去掉重复项,i<=j调整样式
public static void main(String[] args) {
for(int j = 1; j<=9; j++){
for(int i = 1; i<=j; i++){
System.out.println(j+"*"+i+"="+(j*i));
}
}
}
在Java5中引入了一种主要用于数组的增强型for循环
数组重点使用,主要遍历数组和集合。
public static void main(String[] args) {
int[] numbers = {10,20,30,40,50}; //定义了一个数组
for(int i = 0; i<5; i++){
System.out.println(numbers[i]);
}
System.out.println("=================");
//遍历数组的元素
for (int x:numbers){
System.out.println(x);
}
}
break continue
break用于终止循环
continue用于终止某次循环
break 在任何循环语句的主体部分,均可break控制循环的流程break 用于强制退出循环,不执行循环中剩余的语句。(break语句也可在switch中使用)continue 语句在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定
关于goto关键字:
标签,例如:label:
public static void main(String[] args) {
//打印101-150之间所有的质数
int count = 0;
//不建议使用
outer:for(int i=100; i<=150; i++){
for(int j =2; j
练习:打印三角形
public static void main(String[] args) {
//打印三角形 5行
for(int i = 1; i<=5; i++){
for(int j = 5; j>=i; j--){
System.out.print(" ");
}
for(int j = 1; j<=i; j++){
System.out.print("*");
}
for(int j = 1; j
Java方法详解
Java方法是语句的集合,它们在一起执行一个功能:
方法是解决一类问题的步骤的有序集合方法包含与类和对象中方法在程序中被创建,在其他地方被引用
//类.对象.方法
System.out.println();
设计原则:一个方法只做一个功能,这样方便后期扩展
方法的定义
方法一般包含一个方法头和方法体:
修饰符:告诉编译器如何调用该方法,定义了该方法的访问类型返回值类型:方法名:方法的实际名称参数类型:像是一个占位符;
形式参数实参 方法体:
方法调用:对象名.方法名(实参列表)
Java是值传递
方法的重载
重载规则:
方法名称必须相同参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)方法的返回类型可以相同也可以不同仅仅返回类型不同不足以成为方法的重载
理论:
方法名称相同时,编译器会根据调用方法的参数个数、参数类型去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错
命令行传参
当希望运行一个程序的时候再给他传递消息,这就要靠传递命令行参数给main()函数实现
步骤如下:
在ide中编写以下代码package com.yuki.method;
public class Demo06 {
public static void main(String[] args) {
//args.Length 数组长度
for (int i = 0; i 保存打开该java文件所在文件夹,在文件夹路径前面输入cmd 指令进入命令行模式输入如下指令编译java文件:javac Demo06.java
如果出现”编码GBK的不可映射字符”的错误,则在javac Demo06.java后面加上参数-encoding UTF-8,即输入:javac Demo06.java -encoding UTF-8
使用cd ..
命令退回到src文件夹使用java com.yuki.method.Demo06 this is yuki
即可依次输出this、is、yuki
可变参数
JDK1.5开始在方法的声明中,在指定参数类型后加一个省略号(…)一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
public static void main(String[] args) {
Demo04 demo04 = new Demo04();
demo04.test(1,2,3,4,5);
}
public void test(int x, int... i){
System.out.println(i[0]); //2
System.out.println(i[1]); //3
System.out.println(i[2]); //4
System.out.println(i[3]); //5
}
递归
递归包含两个部分:
递归头:什么时候不调用自身的方法。如果没有头,将陷入死循环递归体:什么时候需要调用自身的方法
栈机制
public static void main(String[] args) {
System.out.println(f(5)); //120
}
public static int f(int n){
if(n==1){
return 1;
}else{
return n*f(n-1);
}
}



