今天学的较多,有流程控制以及面向对象。
流程控制之类的,因为之前学过C语言,所以这一部分学的也是比较快,但是还是没敢偷懒,还是老老实实的把代码敲了一遍,有一些小算法是看到视频中的题目,自己写完了,然后跟视频中老师的进行对比,改进了一点。
首先是
1、if语句
/**
* 测试If语句
* @author 25391
*
*/
import java.math.*;
public class TestIf {
public static void main(String[] args) {
double d=Math.random();//返回[0,1),不包括1
System.out.println(d);
//System.out.println((int)(6*Math.random())+1);
int h=(int)(6*Math.random())+1;
System.out.println(h);
if (h<=3) {
System.out.println("小");
}
else {
System.out.println("大");
}
System.out.println("*****************************");
int i=(int)(6*Math.random())+1;
int j=(int)(6*Math.random())+1;
int k=(int)(6*Math.random())+1;
int count=i+j+k;
if (count>15) {
System.out.println("手气不错");
}
if (count>=10&&count<=15) {
System.out.println("手气一般");
}
if (count<10) {
System.out.println("手气不怎么样");
}
}
}
2、if-else语句
double d=Math.random();//返回[0,1),不包括1
System.out.println(d);
//System.out.println((int)(6*Math.random())+1);
int h=(int)(6*Math.random())+1;
System.out.println(h);
if (h<=3) {
System.out.println("小");
}
else {
System.out.println("大");
}
System.out.println("*****************************");
//随机产生一个[0.0,4.0)区间的半径,并根据半径求圆的面积和周长
double r=4*Math.random();
//Math.pow(r,2)求半径的平方
double area=Math.PI*Math.pow(r, 2);
double cricle=Math.PI*2*r;
System.out.println("半径为:"+r);
System.out.println("面积为:"+area);
System.out.println("周长为:"+cricle);
if (area>=cricle) {
System.out.println("面积大于周长");
}
else {
System.out.println("周长大于面积");
}
3、多选择if-elseif-else语句
int age=(int)(100*Math.random());
System.out.println("年龄是"+age+"属于");
if (age<15) {
System.out.println("儿童,喜欢玩");
}
else if (age<25) {
System.out.println("青年,要学习");
}
else if (age<65) {
System.out.println("中年,要挣钱");
}
else {
System.out.println("老年,要休息");
}
4、for循环
int sum=0;
for (int i = 1; i <= 100; i++) {
sum=sum+i;
}
/*1、执行初始化语句:i=1
* 2、判断 i<=100
* 3、执行语句sum=sum+1
* 4、步进迭代i=i+1
* 5、回到第二步
* */
System.out.println(sum);
//逗号运算符
for (int i = 1,j=i+10; i < 5; i++,j=i*2) {
System.out.println("i="+i+"\nj="+j);
}
5、循环嵌套
//计算100的累加和,每5个换行
for (int i = 1; i <=5; i++) {
for (int j = 1; j <=5; j++) {
System.out.print(i+"\t"); //print不换行;println换行
}
System.out.println();
}
//打印99乘法表
System.out.println("*******************************");
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <=i ;j++) {
System.out.print(j+"*"+i+"="+i*j+"\t");
}
System.out.println();
}
6、while循环
//用while循环分别计算100以内的奇数及偶数的和,并输出
System.out.println("*******************************");
int i=0;
int sumOuShu=0;
int sumJiShu=0;
while(i<=100)
{
if ((i%2)==0) {//偶数
sumOuShu=sumOuShu+i;
}
else {//奇数
sumJiShu=sumJiShu+i;
}
i++;
}
System.out.println("偶数和为:"+sumOuShu);
System.out.println("奇数和为:"+sumJiShu);
7、break和continue
int total=0;
System.out.println("开始!");
while (true) {
int i=(int)(Math.random()*100);
total++;
if (i==88) {
break;
}
}
System.out.println("结束,共"+total+"次");
//输出1~100不能被3整除的数,每行输出5个
System.out.println("***********************");
int n=0;//计数器,控制每行的个数
for (int i = 1; i <=150; i++) {
if(i%3==0)
{
continue;
}
if (n==5) {
n=0;
System.out.println();
}
n++;
System.out.print(i+"\t");
}
//输出101到150之间所有的质数(只能被1和它本身整除的数)
System.out.println("***********************");
outer:for (int i = 101; i <=150; i++) {
for (int j = 2; j
8、方法
public static void main(String[] args) {
//通过对象调用普通方法
TestMethod tm=new TestMethod();
tm.printSxt();//无输入,无返回
tm.TestAdd(20, 30, 60);//有输出入,无返回
System.out.println(tm.TestAdd1(50, 60, 10));//有输入,有输出
}
void printSxt()
{
System.out.println("***********************");
System.out.println("******Hello world!*****");
System.out.println("***********************");
}
void TestAdd(int a,int b,int c)
{
System.out.println(a+b+c);
}
int TestAdd1(int a,int b,int c)
{
int sum=a+b+c;
return sum;
}
9、方法的重载
//参数个数不能或者名字不同,或者类型不同
public static int add(int a,int b) {//加static后,调用方法时,不用创建对象,可以直接调用
return a+b;
}
public static int add(int a,int b, int c) {
return a+b+c;
}
public static double add(double a,double b) {
return a+b;
}
注意:(1)只有方法的形参名称不同,不能构成重载
(2) 只有返回值的类型不同,不能构成重载
10、递归:使用递归必须有递归头和递归体,否则会陷入死循环,发生异常
//递归算阶乘
static long factorial(int n)
{
//如果,n=1,则返回1
if (n==1) {//递归头
return 1;
}
else {
return n*factorial(n-1);//递归体
}
}
递归要比循环满的多,一般情况下都用循环,而不用递归。
接下来是面向对象。
面向对象是一种思想,C语言是面向过程的语言,而java是面向对象的语言。
面向过程是指一步一步的做下去,就能实现的,属于不太复杂。
面向对象是指,将事物分类,类就是对象的抽象,说的具体一点,将很多对象的共同点表示出来,就称为类。面向对象通过类解决事情,类与类之间可以互相协作,但是,面向对象的最底层,还是面向过程。
1、类的学习
public class Student {
//属性
int id;
String name;
int age;
Computer computer;
//方法
void study()
{
System.out.println("我在认真学习!"+computer.brand);
}
void Game()
{
System.out.println("游戏中,勿扰!");
}
//构造方法,用于创建这个类的对象。
//无参的构造方法可以有系统自动创建,构造方法的名字与类一样
public Student() {
}
//main方法是程序执行的入口,必须要有
public static void main(String[] args) {
Student stu=new Student();//通过构造方法创建对象
stu.id=110;
stu.name="刘明";
stu.age=18;
Computer c1=new Computer();
c1.brand="联想";
stu.computer=c1;
stu.study();
stu.Game();//对象的方法
}
}
//一个java文件中可以有多个类,
//但是只能有一个public修饰的类
class Computer{
String brand;
}
2、构造器(构造方法、构造函数)
import java.math.*;
class Point{
double x,y;
public Point(double _x,double _y) {
x=_x;
y=_y;
}
//也可以这样
//public Point(double x,double y) {
// this.x=x;
// this.y=y;
//}
//构造方法的第一句总是super();
//加不加都行,编译器会自动加
//构造方法的重载跟方法的重载一样
public double getDistance(Point p) {
return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
}
}
public class TestContuctor {
public static void main(String[] args) {
Point point=new Point(3.0, 4.0);
Point origin=new Point(0.0, 0.0);
System.out.println(point.getDistance(origin));
}
}
3、构造函数的重载
public class User {
int id;
String name;
String pwd;
public User() {
}
public User(int id,String name) {
this.id=id;
this.name=name;
}
public User(int id,String name,String pwd) {
this.id=id;
this.name=name;
this.pwd=pwd;
}
public static void main(String[] args) {
User u1=new User();
User u2=new User(110,"小明");
User u3=new User(110,"小明","123123");
}
}
4、this关键词
public class TestThis {
int a;
int b;
int c;
TestThis(int a,int b)
{
this.a=a;
this.b=b;
}
TestThis(int a,int b,int c)
{
this(a,b);//只能放在第一句
this.c=c;
}
void sing()
{
}
void eat()
{
this.sing();
System.out.println("你妈妈喊你回家吃饭!");
}
//静态方法中不能使用this
public static void main(String[] args) {
TestThis hi=new TestThis(2, 3);
hi.eat();
}
}
5、参数传递测试
public class User4 {
int id;
String name;
String pwd;
public User4() {//
}
public User4(int id,String name) {
this.id=id;
this.name=name;
}
public void testParameterTransfer01(User4 u) {
u.name="小红";
}
public void testParameterTransfer02(User4 u) {
u=new User4(200,"小文");//这里其实是给了u一个新的地址,不会影响u1
}
public static void main(String[] args) {
User4 u1=new User4(100, "小明");//初始化对象时,将小明放入堆中
//给u1的name,此时假设u1的地址为123
u1.testParameterTransfer01(u1);//使用u1进行参数传递,实际上数将u1的地址给了u,所以u指向123
// 对u指向地址的name更改参数,会更改u1的参数,因为他俩一个地址
System.out.println(u1.name);
u1.testParameterTransfer02(u1);
System.out.println(u1.name);
}
}
6、静态块
public class User3 {
int id;
String name;
String pwd;
static String company;
static {//静态块,在类初始化的时候执行,不能调用普通的成员,只能使用静态成员
//静态块在构造方法之前执行
System.out.println("执行类的初始化工作");
company="阿里爷爷";
printCompany();
}
public static void printCompany() {
//login();调用非静态成员会报错
System.out.println(company);
}
public static void main(String[] args) {
User3 u3=null;
}
}
今天大体上就学了这么多,感觉每天都有事情做真的太好了,之前天天玩游戏的生活,真的好无趣,感觉自己脑子都不会动了通过写写小程序来学习新的东西,特别充实!