从0基础开始学习Java第3天

今天学的较多,有流程控制以及面向对象。
流程控制之类的,因为之前学过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 <i/2; j++) {//除不开一半的数字,一半以上的肯定也除不开
    if (i%j==0) {//说明不是质数
     continue outer;//结束循环跳转的outer,若用break则还是会输出i
    }
   }
   System.out.println(i);
  }

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;
 }
 }

今天大体上就学了这么多,感觉每天都有事情做真的太好了,之前天天玩游戏的生活,真的好无趣,感觉自己脑子都不会动了通过写写小程序来学习新的东西,特别充实!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值