黑马训练营java学习日记——二维数组和面向对象(一)

------- android培训java培训、期待与您交流! ----------

一、      二维数组

数组:存储同一种数据类型的多个元素的容器。

      这里的元素可以是8中基本数据类型,也可以是引用类型。

      因此,这个数组中的元素也可以是一个数组,这样就形成了二维数组

1、  二维数组的格式

(1)       int[][] arr = new int[3][2];

     定义了名称为arr的二维数组

     二维数组中有3个一维数组

     每一个一维数组中有2个元素

     一维数组的名称分别为arr[0],arr[1],arr[2]

     给第一个一维数组1角标赋值为32写法是:arr[0][1] = 32;

(2)       int[][] arr = new int[3][];

     二维数组中有3个一维数组

     每一个一维数组都有默认初始化值null

     注意:第一维的长度必须给出

     可以对这三个一维数组进行初始化

      arr[0] = new int[3];

      arr[1] = new int[1];

      arr[2] = new int[2];

(3)       int[][] arr = {{3,8,2},{2,7},{9,0,1,6}}

定义一个名称为arr的二维数组

二维数组中有3个一维数组

每一个一维数组中具体元素也都被初始化

第一个一维数组arr[0] = {3,8,2};

第二个一维数组arr[1] = {2,7};

第三个一维数组arr[2] = {9,0,1,6};

第三个一维数组的长度表示为arr[2].length

       注意:特殊写法情况:int[] x,y[];   其中x是一维数组,y是二维数组。

二维数组练习:

需求:对二维数组进行遍历。

class Array2Test 
{
	public static void main(String[] args) 
	{
		//顶一个个二维数组
		int[][] arr = {{2,4,7,3},{5,6,4},{5,0,2,1,4}};
		for (int x=0;x

需求:

 一年有四个季节,每个季节三个月。

       某公司的销售额如下:

              第一个月 第二个月 第三个月

       春:100         50           300

       夏:500         400         0

       秋:600         350         100

       冬:0            200         0

       要求:请用二维数组表示我的数据,并计算一年的销售额。

/*
	分析:
	 A:将数据用二维数组包装起来
	 B:对二维数组进行遍历,获取每一个元素
	 C:对每个元素进行累加。在开始处定义一个累加变量
	 D:累加后的结果就是我们想要的总金额
*/
class Array2Test2 
{
	public static void main(String[] args) 
	{
		//将数据用二维数组包装起来
		int[][] arr = {{100,50,300},{500,400},{600,350,100},{0,200}};
		int sum = 0;//定义累加变量
		for (int x=0;x

二、      数组综合应用:

题目:

某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:

首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。

请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。

class JiaMi 
{
	public static void main(String[] args) 
	{
		int num = 123456;//要传递的信息
		int[] arr = new int[8];//定义一个数组,用于装信息的每一位数据
		int index = 0;//定义索引值并初始化
		/*
		for (;num>0 ;num/=10 )
		{
			arr[index] = num%10;
			index++;
		}
		*/
		while (num>0)//判断信息值是否大于0并作为循环条件
		{
			arr[index] = num%10;//获取信息的个位数并装入数组
			num/=10;//将个位数装入数组后去掉原信息值的个位
			index++;//索引值加1
		}
		syso(arr,index);//调用打印方法,查看结果是否正确
		for (int x=0;x

三、      面向对象(一)

   面向对象设计实质上就是对现实世界的对象进行建模操作。

对象:分为两个部分,即:静态部分和动态部分。静态部分,顾名思义就是不能动的部分,这个部分被称为“属性”,如:一个人,包括高矮、胖瘦、性别、年龄等属性。动态部分,如,这个人可以行走、微笑、说话、哭泣等,这些就是这个人具备的行为(动态部分)。

类:实质上就是封装对象属性和行为的载体,而对象则是类抽象出来的一个实例。

1、面向对象基本知识

       (1)面向对象:是一种编程思想。

              A:它是相对于面向过程而言的。

                     a:面向过程强调的是过程

                     b:面向对象强调的是对象调用功能,看最终的结果

              B:它是基于面向过程的。

       (2)面向对象的特点:

              A:是一种符合人们思考习惯的一种思想。

              B:把复杂的事情简单化了。

              C:是我们从以前的执行者变成了现在的指挥者。

   (3)类与对象的关系

              A:类和对象分别是什么?

                     a: 是对同一类事物的抽象

                     b:对象 是该类事物的具体的存在的个体

              B:java是怎么来描述现实世界事物的?

                     a:现实世界的事物可以通过属性和行为来描述

                     b:java对现实世界的事物是通过类来体现的

                     c:java中的成员和现实世界事物的对应关系:

                            成员变量:属性

                            成员方法:行为

2、成员变量和局部变量

       区别:

              A:位置不同:

                     成员变量定义在类中,方法外。

                     局部变量定义在方法中。

              B:生命周期:

                     成员变量是随着对象的创建而存在,在堆内存,随着对象的消失而消失。

                     局部变量是随着方法的调用或者语句的执行而存在,在栈内存,随着方法的调用完毕或者语句执行完毕而消失。

              C:初始化值:

                     成员变量都有默认初始化值

                     局部变量没有默认初始化值,要想使用:必须是创建,赋值,使用。

        使用变量的原则:就近原则。

 

class Car//对Car这类事物进行描述
{
	String color = "red";
	int num = 4;
	void show()
	{
		System.out.println("color="+color+"..num="+num);
	}
}
class CarDemo 
{
	public static void main(String[] args) 
	{
		Car c = new Car();//建立对象
		c.color = "black";//对对象的属性进行修改
		c.show();//使用对象的功能。
	}
}

对象的内存结构:

黑马训练营java学习日记——二维数组和面向对象(一)_第1张图片

只要是用new操作符定义的实体就在会堆内存中开辟一个新的空间。

并每一个对象中都有一份属于自己的属性。

通过 对象.对象成员 的方式操作对象中的成员,

对其中一个对象的成员进行了修改。和另一个对象没有关系。

3、匿名对象:

定义:

匿名对象就是没有名字的对象,是对象的简化形式。

使用场景:

   A:当对对象方法仅进行一次调用的时候

         主要原因:匿名对象使用完毕,对象就是垃圾了,可以在JVM空闲的时候被回收

   B:匿名对象可以作为实际参数进行传递

class Demo
{
	public void show()
	{
		System.out.println("上课了");
	}

	public void play()
	{
		System.out.println("玩我们自己编写的游戏");
	}

	public void method(Demo d)  //Demo d = new Demo();
	{
		d.show();
		d.play();
	}
}

class NiMingDemo 
{
	public static void main(String[] args) 
	{
		//创建对象
		Demo d = new Demo(); //创建一个对象 
		//d.show();//调用show方法
		//d.play();//调用play方法
		//d.method(d);//调用method方法并将自己这个对象作为参数传递

		//使用匿名对象来调用方法

		new Demo().show();  //创建了一个对象,调用方法
		new Demo().play();  //又创建了一个对象,调用方法

		Demo d2 = new Demo();
		d2.method(d);
		d2.method(new Demo());//将匿名对象作为参数传递
 	}
}

为什么要使用匿名对象?(面试)

答:匿名对象使用完毕后,因为没有栈内存的指向,所以本身就是垃圾了,可以在JVM空闲的时候被垃圾回收机制回收。

4、  封装(Encapsulation)(面向对象的特点之一)

(1)   概念:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式

(2)   好处:

     ①将变化隔离

②便于使用

③提高复用性

④提高安全性

举例:电脑机箱

(3)   封装原则:

①将不需要对外提供的内容都隐藏起来

②把属性都隐藏,提供公共方法对其访问

(4)   封装在java中的体现:

      Java中的类和方法都是封装的体现

(5)   private私有关键字体现:

      A:是一个权限修饰符

      B:用于修饰成员(成员变量和成员方法)

      C:被私有化的成员值在本类中有效

     将成员变量私有化,对外提供对应的setget方法对其进行访问,提高对数据访问的安全性

代码体现:

class Student
{
	String name;

	private int age;

	public void hello()
	{
		age = 20;
	}

	public void hello(int a)
	{
		//加入条件判断
		if(a<0 || a>100)
		{
			System.out.println("年龄输入有误");
		}
		else
		{
			//正常数据就赋值成功
			age = a;
		}
	}

	public void show()
	{
		System.out.println("学生的年龄:"+age);
	}

	/*
	public static void main(String[] args)
	{
		Student s = new Student();
		System.out.println(s.age);
	}
	*/
}

class StudentDemo
{
	public static void main(String[] args)
	{
		Student s = new Student();

		//赋值
		//s.age = 20;
		//输出
		//System.out.println(s.age);
		//s.hello();
		//我不可能每个学生的年龄都是20
		//我们可以把年龄作为参数传递:a
		s.hello(20);
		//s.hello(-20);

		//使用方法
		s.show();
	}
}

5、  构造方法

   (1)用于创建对象的方法。

       多个构造方法是以重载的形式出现的

       (2)特点:

              A:构造方法的名称和类名相同

              B:不定义返回值类型

              C:没有返回值

 

              格式:

              修饰符 类名(参数)

              {

                     //code

              }

       (3)构造方法的特点:

              A:如果一个类没有写构造方法,系统会默认给出一个无参构造方法。

              B:如果一个类写了构造方法,系统都不会再给出默认构造方法。

                这个时候,如果你想要使用无参构造方法,自己写。

 

                推荐:任何一个非测试类,都给出无参构造方法。

              C:构造方法还可以给成员变量赋值

    (4) 构造方法和成员方法的区别?

                     A:作用

                            构造方法:用于创建对象,并进行初始化值。

                            成员方法:完成特定功能的代码。

                     B:调用

                            构造方法:在创建对象的时候被调用。

                            成员方法:使用对象调用。

     代码体现:

 

   class Student
{
	private String name;

	//没有修饰符的时候,是默认修饰符
	/*
	Student()
	{
		System.out.println("真的是调用我了吗");
	}
	*/

	
	public Student()
	{
		System.out.println("name:"+name);
		name = "hello";
		System.out.println("name:"+name);
	}
	
	public Student() //"刘先生"
	{
		System.out.println("name:"+name); //null
		name = n; //"刘先生"
		System.out.println("name:"+name); //"刘先生"
	}

	public void show()
	{
		System.out.println("我爱上晚自习");
	}
}

class ConstructorDemo
{
	public static void main(String[] args)
	{
		//使用默认的构造方法
		Student s = new Student();

		//通过对象调用方法
		//s.show();

		//使用带参数的构造方法
		Student s2 = new Student("刘先生");
		s2.show();

	}
}

6、  this关键字

(1) 特点:this代表其所在函数所属对象的引用,也就是说,this代表本类对象的引用。

      谁调用,this就代表谁。

(2) this的使用场景

   ①避免局部变量隐藏成员变量

       public Student(String name,int age)

               {

                      this.name = name;

                      this.age = age;

               }

 

               public void setName(String name)

               {

                      this.name = name;

               }

      代码示例:

 

class Student
{
	private String name;
	private int age;

	public Student(){}

	/*
	public Student(String n,int a)
	{
		name = n;
		age = a;
	}
	*/

	//n,a这样的变量没有意义,不建议使用。最好使用name,age。
	public Student(String name,int age)  //"凤姐",18
	{
		//变量的使用原则:就近原则
		//本身赋值给本身 name = name;
		//name = name;
		//age = age;

		//Student.name = name;
		this.name = name;
		this.age = age;
	}

	//getXxx()/setXxx()省略

	public void show()
	{
		System.out.println(name+"***"+age);
	}

	public void setAge(int age)
	{
		//age = age;
		this.age = age;
	}

	public int getAge()
	{
		//int age = 30;
		//return this.age;
		return age; //省略了this。可以认为前面有一个this关键字。
	}
}

class ThisDemo
{
	public static void main(String[] args)
	{
		//调用无参构造方法创建对象
		Student s = new Student();

		s.setAge(20);

		System.out.println("age:"+s.getAge());

		s.show(); //null***0

		//调用带参构造方法
		Student s2 = new Student("刘",18);
		s2.show();
	}
}

②在方法内部有一个this对象,哪个对象调用,this代表谁。

        举例:比较两个学生的年龄

class Student
{
	private String name;
	private int age;

	public Student(){}
	
	public Student(String name,int age)
	{
		this.name = name;
		this.age = age;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public String getName()
	{
		return name; //这里的this一般省略
	}

	public void setAge(int age)
	{
		this.age = age;
	}

	public int getAge()
	{
		return age;
	}

	/*
		明确:
			返回值类型:boolean
			参数列表:两个学生的年龄,int age1,int age2
	*/

	/*
	public boolean compare(int age1,int age2)
	{
		return age1==age2; //它本身就是一个boolean值
	}
	*/

	//面向对象的语言,所以,尽可能的把参数作为对象传递。
	/*
	public boolean compare(Student s1,Student s2)
	{
		//return s1.getAge() == s2.getAge();
		return s1.age == s2.age;
	}
	*/
	public boolean compare(Student s)  //s2
	{
		//问题来了,这个时候,我们只看到了一个对象。
		//那么,还差一个对象在哪里?this
		//也就是说:this代表s1,s代表s2
		//return s1.age == s2.age;
		return this.age == s.age;
	}
}

class ThisDemo2 
{
	public static void main(String[] args) 
	{
		//创建了两个学生,并且给出了年龄
		Student s1 = new Student();
		s1.setAge(20);

		Student s2 = new Student();
		s2.setAge(30);

		//做比较
		//boolean flag = s1.compare(s1.getAge(),s2.getAge());
		//boolean flag = s1.compare(s1,s2);
		//这里的s1相当于使用了2次。
		//对象.调用方法()
		//这个时候,已经有一个对象了,你只需要在传递一个对象就可以了。
		boolean flag = s1.compare(s2);
		System.out.println("flag:"+flag);
	}
}

this在构造方法中的使用

                this(参数):表示调用构造方法,调用哪个根据参数决定。

                注意:在构造方法的第一条语句使用。

     代码示例:

class Student
{
	private String name;
	private int age;

	public Student()
	{
		
	}

	public Student(String name)  //this(name);  //刘
	{
		this.name = name;  //刘
	}
	
	public Student(int age)
	{
		this.age = age;
	}
	
	public Student(String name,int age)  //new Student("刘",20);
	{
		this.name = name;
		//简化书写
		//this(name);  //刘//必须写在第一条语句上
		this.age = age;
		//this(age);//前边写了this(参数)后边就不能再写了
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public String getName()
	{
		return name;
	}

	public void setAge(int age)
	{
		this.age = age;
	}

	public int getAge()
	{
		return age;
	}
}

class ThisDemo3
{
	public static void main(String[] args)
	{
		Student s = new Student("刘",20);

		System.out.println(s.getName()+"***"+s.getAge());
	}
}

7、  代码块

(1)    {}括起来的代码,就叫代码块

(2)    分类:

①局部代码块:可以控制局部变量的生命周期

②构造代码块:

在类中,方法外,用{}扩起来的代码块被称为构造代码块。

每个构造方法调用前都会去调用

       代码示例:

 

class Person
{
	//构造代码块
	{
		System.out.println("哇哇的哭");
	}
	public Person()
	{
		//初始化代码
		//System.out.println("哇哇的哭");
		//cry();
	}
	public Person(int age)
	{
		//System.out.println("哇哇的哭");
		//cry();
		System.out.println(age);
	}
        //构造代码块
	{
		System.out.println("哈哈的笑");
	}
	//写个功能
	/*
	public void cry()
	{
		System.out.println("哇哇的哭");
		//code.......
	}
	*/
}
class BlockDemo
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
		int y = 20;
                //局部代码块
		{
			int x = 10;
			System.out.println("真的吗"+x);
		}

		//System.out.println("真的吗"+x);//不会访问到x的值

		Person p = new Person();

		Person p2 = new Person(100);
	}
}

(3) 静态代码块,构造代码块,构造方法的执行顺序及特点:

                            静态代码块 > 构造代码块 > 构造方法

 

                            静态代码块只执行一次。

                            构造代码块,每次调用构造方法前都执行一次。

                            构造方法用于创建对象。

class Person
{
	Static//静态代码块
	{
		System.out.println("哈尼,亲,你好");
	}
	{//构造代码块
		System.out.println("欢迎来到人间");
	}
	public Person()//构造方法
	{
		System.out.println("我也很高兴");
	}
	Static//静态代码块
	{
		System.out.println("哈尼,亲,你好2");
	}
	{//构造代码块
		System.out.println("欢迎来到人间2");
	}
}
class BlockDemo 
{
	public static void main(String[] args) 
	{
		Person p = new Person();	
		System.out.println("****************");
		Person p2 = new Person();	
	}
}

8、  static(静态)关键字

    (1)static:是一个关键字,可以用于修饰成员(成员变量和成员方法)

       (2)特点:

              A:随着类的加载而加载

              B:优先于对象的存在而存在

              C:可以直接使用类名访问

              D:被所有的对象共享

       (3)静态使用的注意事项:

              A:静态只能访问静态成员,非静态可以访问静态也可以访问非静态成员。

          非静态方法访问:

                            非静态变量 OK

                            静态变量 OK

                            非静态方法 OK

                            静态方法 OK

                     静态方法访问:

                            非静态变量 NO

                            静态变量 OK

                            非静态方法 No

                            静态方法 OK

              B:静态方法中没有this,super关键字。

                     this,super是创建对象的时候才存在的,而静态是随着类的加载而加载。

              C:主方法是静态的。

           public static void main(String[] args)

        {

              

        }

        public:公共的意思,jvm调用,所以,需要访问权限足够大。

        static:不需要创建对象就可以使用。jvm是通过MainDemo.main(...)调用

        voidjvm调用了main方法,如果有返回值那就是给了jvm了。它要值没用。所以不用返回值。

        mainjvm只识别main方法。

        参数:

               String[] args 字符串数组变量 args

               最开是提供这样的参数是有意义的。意义在于,可以接受键盘数据。

       (4)静态成员和非静态成员的区别:

              A:静态成员是跟类相关的,也被称为类变量。可以被类名直接访问,也可以被对象访问。

                建议使用类名访问。

                非静态成员是跟对象相关的,所以,被称为成员变量,实例变量。被对象调用。

         没有被静态修饰的成员,要想被访问,必须创建对象访问。而现在,被静态修饰后,可以通过对象访问,也可以通过类名访问。

              建议,静态修饰全部使用类名访问。

              B:静态成员随着类的加载而加载,也就意味着随着类的消失而消失。生命周期长。

                非静态成员是创建对象才存在的,随着对象的消失而消失。

              C:静态成员存储在方法区中的静态区。

                非静态成员存储在对象所属堆内存。

              D:静态修饰的是类的所有对象的共享数据。

                非静态修饰的是对象的特有数据。

       (5)什么时候使用静态呢?

              A:根据实际情况分析,如果是被所有对象共享的数据,就用静态修饰。

           B:如果成员方法没有访问过对象的特有数据,这个方法就可以定义为静态的。

     代码示例:

 

class Student
{
	String name = "杨幂";
	static String country = "中国";

	//public Student(){}

	public void show()
	{
		//System.out.println("name:"+name);
		System.out.println("country:"+country);
		//show2();
		show3();
	}

	public void show2()
	{
		System.out.println("show2");
	}

	public static void show3()
	{
		System.out.println("show3");
	}

	public static void show4()
	{
		//System.out.println("name:"+name);
		System.out.println("country:"+country);
		//show2();
		//show3();
		//System.out.println(this.country);
	}
}

class StaticDemo3 
{
	public static void main(String[] args) 
	{
		//创建对象
		Student s = new Student();
		s.show();
		//s.show4();
		Student.show4();
	}

9、  制作帮助文档

我们可以定义一个工具类,方便以后使用。

在此我们定义一个数组操作的工具类。

工具类中的方法一般都是完成一个功能的,没有去访问类的特有成员,所以直接使用静态修饰。

制作帮助文档用到了JDKbin目录下的一个工具,javadoc

在制作过程中可能会出现一个问题:找不到可以文档化的公共或受保护的类,

原因是类的访问权限不够大,那么就加public权限。

API:Application Programming Interface 应用程序编程接口。也就是说明书。

帮助文档的制作过程:

    首先写一个java文件。

        把其中的内容加上文档注释。

        javadoc命令解析:

               javadoc -d 目录 -version -author 文件名

        解释:

               javadoc javadoc命令

               -d 后面跟的是文档将来存储的目录

               目录 就是写一个路径名称。例如:c:\\test, doc

               -version,-author是把文件中的versionauthor进行解析

               文件名 就是加入了文档注释的类文件的名称

/**
*	这是操作数组的工具类
*
*	@author itcast
*	@version V1.0
*/
public class ArrayTools
{
	/**
	* 这是一个成员变量
	*/
	public static int x =  10;
	//为了不让外界创建对象
	/**
	*不让外界创建对象
	*/
	private ArrayTools(){}
	/*
	public ArrayTools(int x)
	{
		this.x = x;
	}
	*/
	/**
	*遍历数组。格式:元素1,元素2,...
	*@param arr 表示这是要传递一个数组变量
	*/
	public static void printArray(int[] arr)
	{
		//遍历数组
		for(int x=0; xmax)
			{
				max = arr[x];
			}
		}

		//返回参照物,它保留的就是数组中的最大值
		return max;
	}

	/**
	*对数组进行排序
	*@param arr 表示这是要传递一个数组变量
	*/
	public static void bubbleSort(int[] arr)
	{
		for(int x=0; xarr[y+1])
				{
					int temp = arr[y];
					arr[y] = arr[y+1];
					arr[y+1] = temp;
				}
			}
		}
	}
}

10、 单利设计模式(重点)

设计模式:

        把一些重复的工作,给抽取出来,形成一个模型。以后,做类似的事情,按照这个模型就可以了。

(1)单例设计模式:保证类在内存中只有一个对象。

       (2)实现的思路:

              A:外界不能创建对象

              B:本类创建一个对象

              C:提供公共的访问方式

(1)     实现方法:

A:把构造方法私有化

B:在类中new一个对象

C:对外提供一个public类型的方法访问

饿汉式:

class Student
{
	//把构造给私有化
	private Student(){}
	//本身创建一个对象
	//静态只能访问静态
	//让外界不能通过静态访问,所以改变修饰符
	private static Student s = new Student();  //成员变量
	//int x = 10;
	//为了让外界访问,并且外界还不能创建对象,用static修饰
	public static Student getStudent()
	{
		return s;
	}

	public void show()
	{
		System.out.println("show");
	}
}
class SingletonDemo//测试类
{
	public static void main(String[] args)
	{
		//不是单例
		//Student s = new Student(); //创建了一个对象,内存中有一个地址值
		//Student s2 = new Student();//创建了一个对象,内存中有一个地址值
		//System.out.println(s==s2); //两个对象类型的变量用==比较,比的是地址值

		//是单例
		Student s1 = Student.getStudent();
		Student s2 = Student.getStudent();

		System.out.println(s1==s2);

		s1.show();
		s2.show();
	}
}

 懒汉式:

 

class Student
{
	//为了不让外界创建对象
	private Student(){}
	//这个时候,不去创建对象
	private static Student s = null; //s = new Student();
	public static Student getStudent()
	{
		//只在第一次访问的时候,创建一次。
		if(s==null)
		{
			s = new Student();
		}
		return s;
	}
	public void show()
	{
		System.out.println("show");
	}
}
class SingletonDemo2 //测试类
{
	public static void main(String[] args) 
	{
		Student s1 = Student.getStudent();
		Student s2 = Student.getStudent();
		System.out.println(s1==s2);
		s1.show();
		s2.show();
	}
}

单利设计模式的完整代码:

饿汉式:

class Student
{
		private Student(){}
		private static Student s = new Student();
		public static Student getStudent()
		{
			return s;
		}
}

懒汉式:

class Student
{
		private Student(){}
		private static Student s = null;
		public static Student getStudent()
		{
			if(s==null)
			{
				s = new Student();
			}
			return s;
            }
}

 

11、  Math

      (1)Math类用于数学运算

         (2)Math类的特点:

              没有构造方法,成员都是静态的。

(3)能用到的主要的方法:

     成员变量:(属性,字段)

               PI 圆周率

               E 自然对数的底数

成员方法:

               abs 绝对值

               ceil(double a) 返回的是大于等于参数的最小整数

               floor(double a) 返回的是小于等于参数的最大整数

               max 返回两个数中较大的值

               min 返回两个数中较小的值

               pow(double a,double b) 返回第一个参数的第二个参数的次幂

               random 随机数,[0.0,1.0) 包含左边,不包含右边

               round 四舍五入取值

               sqrt 返回数据的平方根

   代码示例:

class MathDemo
{
	public static void main(String[] args)
	{
		//成员变量
		System.out.println("PI:"+Math.PI);
		System.out.println("E:"+Math.E);

		//成员方法
		System.out.println("abs:"+Math.abs(-12)); //12//求绝对值
		System.out.println("ceil:"+Math.ceil(12.56)); //13//返回大于等于参数的最小整数
		System.out.println("ceil:"+Math.ceil(-12.56));//-12
		System.out.println("floor:"+Math.floor(12.56));//12//返回小于等于参数的最大整数
		System.out.println("floor:"+Math.floor(-12.56));//-13

		System.out.println("max:"+Math.max(12,23));//求两个参数中较大的一个
		System.out.println("min:"+Math.min(12,23)); //求两个参数中较小的一个

		//比较三个数的最大值
		System.out.println("max:"+Math.max(Math.max(12,23),17));
	
		System.out.println("pow:"+Math.pow(2,4));//返回第一个参数的第二个参数次幂
		System.out.println("sqrt:"+Math.sqrt(16));//返回数据的平方根

		System.out.println("round:"+Math.round(12.35));//四舍五入
		System.out.println("round:"+Math.round(12.65));

		System.out.println("random:"+Math.random());//返回一个随机数

	}
}

12、  Scanner

     Scanner类可以实现我们从键盘录入数据。

       使用步骤:

              A:导入 import java.util.Scanner 类的上面。

              B:创建对象

                        Scanner sc = new Scanner(System.in); //标准的键盘录入

              C:通过对象使用功能

                        获取键盘录入的一个int类型的值

                        public int nextInt()

   代码示例:

import java.util.Scanner;
class ScannerDemo 
{
	public static void main(String[] args) 
	{
		//创建对象
		Scanner sc = new Scanner(System.in);
		//使用功能
		int number = sc.nextInt();
		System.out.println("number:"+number);
	}
}

案例:

 1)求两个数的和:

import java.util.Scanner;
class ScannerTest 
{
	public static void main(String[] args) 
	{
		//创建对象
		Scanner sc = new Scanner(System.in);
		//获取数据
		System.out.println("请输入一个数据:");
		int x = sc.nextInt();
		System.out.println("请在输入一个数据:");
		int y = sc.nextInt();
		int result = sum(x,y);
		System.out.println("结果是:"+result);
	}
	public static int sum(int a,int b)
	{
		return a+b;
	}
}

2)猜数字小游戏:

/*
	猜数字小游戏
	A:程序产生一个随机数据。(这个数据是1-100之间的)
		(int)(Math.random()*100)+1
	B:请从键盘录入数据,用Scanner实现。
	C:判断数据
		如果键盘录入数据大于随机数,那么提示数据大了
		如果键盘录入数据小于随机数,那么提示数据小了
		如果键盘录入数据等于随机数,那么提示恭喜你,猜对了
	D:想办法实现多次猜,当正确后退出程序。
	统计猜多少成功。
*/
import java.util.Scanner;
class GuessNumber 
{
	public static void main(String[] args) 
	{
		int num = (int)(Math.random()*100+1);//产生一个1-100的随机数
		int count = 0;//定义计数器
		System.out.println("请输入一个1-100之间的数字:");
		Scanner sc = new Scanner(System.in);//从键盘获取数据
		while(true)
		{
			int a = sc.nextInt();//读取键盘录入的数据
			if (a<1 || a>100)//判断是否是1-100之间的数
			{
				System.out.println("您输入的数据有误");
				continue;//如果不是1-100之间的数,继续循环
			}
			else
			{
				count++;//每输入一次正确的值count自增一次
				if (a>num)//如果输入的数据比产生的数据大了
				{
					System.out.println("您输入的"+a+"大了");
				}
				else if(a




 


 


 


 


 



 




 


 




 


 



 

你可能感兴趣的:(java基础学习)