随笔- 4  文章- 0  评论- 0  阅读- 217 

java输出流

常用输出语句

System.out.println();//换行打印,输出之后会自动换行

System.out.print();//不换行打印

System.out.printf();//按格式输出

java输入流:Scanner类

从键盘获取不同类型的变量

具体实现步骤

  • 导包:import java.util.Scanner;

  • Scanner的实例化:Scanner scan = new Scanner(System.in);

  • 调用Scanner类的相关方法(next() / nextXXX()),来获取指定类型的变量

    • 对于char型的获取,Scanner没有提供相关的方法,只能获取一个字符串

    注意:

    需要根据相应的方法,来输入指定类型的值,如果输入的数据类型与要求的类型不匹配时,会报异常:InputMisMatchException,导致程序终止。

    import java.util.Scanner;
    
    public class test {
        public static void main(String[] args) {
    
            Scanner scan = new Scanner(System.in);
    
            System.out.println("请输入您的姓名:");
            String name = scan.next();
    
            System.out.println("请输入您的年龄:");
            int age = scan.nextInt();
    
            System.out.println("请输入您的体重:");
            double weight = scan.nextDouble();
    
            System.out.println("您是否单身:(true / false)");
            boolean isLove = scan.nextBoolean();
    
            System.out.println("请输入您的性别:");
            String gender = scan.next();
            char genderChar = gender.charAt(0);//获取索引为0的字符
    
            System.out.println("您的姓名是:" + name);
            System.out.println("您的年龄是:" + age);
            System.out.println("您的体重是:" + weight);
            System.out.println(isLove);
            System.out.println("您的性别是:" + genderChar);
        }
    }
    
    

if else 语句

else结构是可选的

针对条件表达式

  • 互斥
  • 交集
  • 包含

如何获取一个随机数

double value = Math.random() * 100;//[0.0],[1.0) --> [0.0],[100.0)
double value = Math.random() * 90 + 10;//[0.0],[1.0) --> [0.0],[90.0) --> [10.0],[100.0)
int value = (int)Math.random() * 90 + 10;//[0],[1) --> [0],[90) --> [10],[99]//强制转换

公式

//[a,b] : (int)(Math.random()  * (b - a + 1) + a)

switch-case语句

/*switch(表达式){
    case 常量1:
        执行语句1;
        //break;
    case 常量2:
    	执行语句2;
    	//break;
    ......
    default:
    	执行语句n;
    	//break;  
}
*/

说明

  • 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾结束为止。

  • break可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出。

  • switch结构中的表达式只能是如下六种数据类型之一:byte 、 short 、 char 、 int 、 枚举类型 、 String类型

  • case后只能声明常量,不能声明范围。

  • break关键字是可选的

  • default相当于if-else中的else,default是可选的而且位置是灵活的一般放在最后一个

  • 凡是可以使用switch-case的结构,都可以转变为if-else。反之不成立。

循环结构

循环语句的四个组成部分

初始化部分(init_statement)

循环条件部分(text_exp) -->boolean类型

循环体部分(body_statement)

迭代部分(alter_statement)

for循环结构

/*
for(初始化 ; 循环条件 ; 迭代条件)
{
		循环体;
}
*/

while循环结构

/*
while(循环条件)
{
	循环体;
	迭代条件;
}
*/

说明

写while循环千万不要丢了迭代条件,丢了可能导致死循环

算法具有有限性

避免出现死循环

  • for 和 while 可以相互转换

do-while循环结构

/*
初始化;
do
{
	循环体;
	迭代条件;
}while(循环条件);
*/

最简单的“无限”循环

//while(True)
//for(;;)  
//结束循环的方式:
//  	循环条件部分返回false
//      在循环体中执行break

无限循环存在的意义是:并不知道循环多少次,需要根据循环体内部某些条件,来控制循环的结束。

循环嵌套的使用

说明

外层循环控制行数,内层循环控制列数

算法的优化检测 一个小玩意

long start = System.currentTimeMillis();//获取当前时间距离1970-01-01 00:00:00的毫秒数
.......
....
long end = System.currentTimeMillis();//获取当前时间距离1970-01-01 00:00:00的毫秒数
System.out.println("所花费时间为:" + (end - start));//此算法所需时间

小题:输出100000内的质数(算法优化)

代码

public class demo7 {
    public static void main(String[] args) {

        boolean isFlag = true;

        long start = System.currentTimeMillis();

        int cout = 0;

        for (int i = 2; i < 100000; i++)
        {
            for (int j = 2; j < Math.sqrt(i); j ++)
            {
                if (i % j == 0)
                {
                    isFlag = false;
                    break;
                }
            }
            if (isFlag)
            {
                //System.out.println(i);
                cout++;
            }
            isFlag = true;
        }
        long end = System.currentTimeMillis();
        System.out.println("质数个数:" + cout);
        System.out.println("所花费时间为:" + (end - start) + "毫秒");
        //未优化14171 没有break
        //优化1后1511 加上break
        //优化2后124  加上break和根号
        //优化3后17   加上break和根号 取消输出质数
    }
}

break和continue使用上的比较

break一般

但是break可以

public class demo8 {
    public static void main(String[] args) {

        label:for (int i = 1; i <= 4; i++)
        {
            for (int j = 1; j <= 10; j++)
            {
                if ( j % 4 == 0)
                {
                    break label;//结束指定标识的一层循环结构
                }
                System.out.print(j);
            }
            System.out.println();
        }
    }
}

利用continue进行算法优化

public class 算法优化 {
    public static void main(String[] args) {

        long start = System.currentTimeMillis();

        int cout = 0;

        label:for(int i = 2; i < 100000; i++)
        {
            for(int j = 2; j < Math.sqrt(i);j++)
            {
                if (i % j == 0)
                {
                    continue label;
                }
            }
            cout ++;
        }
        long end = System.currentTimeMillis();
        System.out.println("质数个数:" + cout);
        System.out.println("计算时长:" + (end - start) + "毫秒");
    }
}
 posted on 2021-04-25 21:47  今wan打老虎  阅读(41)  评论(0)    收藏  举报
点击右上角即可分享
微信分享提示