第三章

数据类型:

数据类型分为基本数据类型和引用数据类型。

基本数据类型一共有四种(整数、浮点数、字符、布尔)。

其中整数又分为四类:byte,short,int,long。之所以分为四类,原因是主要看我们数字的取值范围。

byte大小为一字节,取值范围为-2^7~2^7 - 1 = -128~127。short大小为二字节,取值范围为-2^15~2^15 - 1 = -32768~32767

int大小为四字节,取值范围为-2^31~2^31 - 1。long大小为八字节,取值范围为-2^63 ~ 2^63 - 1。

浮点数分为两类:float、double。float大小为四字节,double大小为八字节。(取值范围同上)

浮点型常量默认为double类型。 

字符分为 char (2字节)和0~65535(字符的编号)。

布尔的结果只有true和false ,在Java当中并没有给boolean一个明确的大小,主要和底层虚拟机相关。如果boolean是一个变量的话,大小为1字节。如果boolean是一个数组的话,每个空间的大小是4个字节。

引用数据类型分为四种 (字符串,null,数组,对象)

String 也不存在具体的大小,它的大小是根据字符串的内容而决定的。目前而言,可以像用基本类型一样去使用String类型数据 。String其实是java中自带的一个类

那么如何定义变量呢? 

 数据类型 变量名=常量;数据类型 变量;变量=常量;

运算符

算数运算符(+:加法运算;-:减法运算;*:乘法运算;/:除法运算;%取余运算;++:自加运算;--:自减运算)
 

在除法运算中,如果两边都是整数 结果就是整数(整除) ,如果两边至少存在一个小数,结果就是小数。

取余运算中,相当于是整除运算,但是得到的结果是余数。

自加运算有前++和后++,前++为 ++i(意为i本身直接+1再参与运算),后++为i++(意为i先参与运算再本身+1)

 

赋值运算符(+=;-=,*=,/=,%=,=)

比较运算符(>;<;>=;<=;==;!=) 

 在==中,不管是在基本数据类型还是在后期面向对象 ==永远比的是两个变量(常量)当中所存储的那个数据的地址!
常量在常量池中的地址;对象在堆内存中的地址。

比较运算符的运算的结果肯定是一个boolean类型(true或false)。

逻辑运算符(与,或,非,异或)

 与:同真则真,遇假则假。单与&,双与&&。双与的话,左边一旦为假,右边无论真假,结果都是假,所以右边可以不运行。

或:有真则真,同假则假。单或|,双或||,双或的话,左边一旦为真,右边无论真假,结果都是真,所以右边可以不运行。

非:非真就是假,非假就是真。表示为!。

异或:相同为假,不同为真。表示为^。

逻辑运算符的结果肯定是一个布尔类型(true或false)

位运算符(&;|;^;>>;<<)

位运算符指的就是二进制之间的运算。 

三目运算符(表达式为  变量=布尔表达式 ? 值1 : 值2; )

布尔表达式的意思是,计算的结果必须是boolean类型。如果布尔表达式的结果是true,则将值1赋予变量。如果布尔表达式的结果是false,则将值2赋予变量。它在一定程度上简化了if语句的功能。 

流程控制语句

顺序结构(代码从主函数开始逐行向下运行),是一种宏观的代码运行结构 。

选择结构(if语句;switch语句)。

 if语句:

基本格式
if(条件表达式){
      当条件为true时执行的代码;
}else{
      当条件为false时执行的代码;
}

单if形式
if(条件表达式){
     当条件为true时执行的代码;
}

嵌套if-else形式
if(条件1){
      条件1为true时执行的代码;
      if(条件2){
          条件2为true时执行的代码;
      }else{
          条件2为false时执行的代码;
      }
}else{
      条件1为false时执行的代码;
}

if-else-if形式
if(条件1){

}else if(条件2){

}else if(条件3){

}else{

}

switch语句:一般在多选情况下使用。

switch(变量){
    case 值1:
          执行语句1;
          break;
    case 值2:
          执行语句2;
          break;
    case 值3:
          执行语句3;
          break;
    ........
    deafult:
          执行语句n;
          break;
}

if语句既可以对一个单一的值进行判断,也可以对一个区间的值进行判断。switch语句只能判断单一的值。

switch所要求的变量的数据类型:byte short int char String 枚举。

 

循环结构:主要解决重复性执行的代码。 (已知重复次数的循环,用for循环;不知重复次数但是已知结束条件的循环,用while循环)

循环的四要素: 1.循环初始化(指的就是循环从什么时候开始执行)2.循环继续条件(什么情况循环继续执行/反过来说,循环何时结束)3.循环体(就是我们需要被多次循环执行的代码块)4.循环的周期,步长,间距(当前循环和下一次循环之间的变更)。

for循环:for(1循环的初始化 ;  2循环的继续条件 ; 4循环的步长 ){
         3循环体
}

执行的顺序为:1->2->3->4->2->3->4>2->……一直到循环的条件满足

 例题

3-1 解一元二次方程
import java.util.Scanner;
class test01 {
        public static void main(String[] args) {
                Scanner scanner = new Scanner(System.in);
                System.out.print("请输入a,b,c:");
                double a=scanner.nextDouble();
                double b=scanner.nextDouble();
                double c=scanner.nextDouble();
                if(b*b-4*a*c<0){
                        System.out.printf("无实数根");
                }else if(b*b-4*a*c>0){
                        double r1=((-b+Math.sqrt(b*b-4*a*c))/(2*a));
                        double r2=((-b-Math.sqrt(b*b-4*a*c))/(2*a));
                        System.out.printf("r1=%.2f,r2=%.2f",r1,r2);
                }else{
                        double r=((-b+Math.sqrt(b*b-4*a*c))/(2*a));
                        System.out.printf("r=%.2f",r);
                }
        }

}
3-2 解2-2线性方程
import java.util.Scanner;
class test02 {
        public static void main(String[] args) {
                Scanner scanner = new Scanner(System.in);
                System.out.print("请输入a,b,c,d,e,f:");
                double a=scanner.nextDouble();
                double b=scanner.nextDouble();
                double c=scanner.nextDouble();
                double d=scanner.nextDouble();
                double e=scanner.nextDouble();
                double f=scanner.nextDouble();
                if(a*d-b*c==0){
                        System.out.printf("方程式无解");
                }else{
                        double x=((e*d-b*f)/(a*d-b*c));
                        double y=((a*f-e*c)/(a*d-b*c));
                        System.out.printf("x=%.2f,y=%.2f",x,y);
                }
        }

}
3-3 找到将来的日期
import java.util.Scanner;
class test03 {
        public static void main(String[] args) {
                Scanner scanner = new Scanner(System.in);
                System.out.print("今天是周几");
                int today = scanner.nextInt();
                System.out.print("未来的几天:");
                int future=scanner.nextInt();
                String todayStr="";
                String futureDayStr="";
                if(today==0){
                    todayStr="周日";
                }else if(today==1){
                    todayStr="周六";
                }else if(today==2){
                    todayStr="周五";
                }else if(today==3){
                    todayStr="周四";
                }else if(today==4){
                    todayStr="周三";
                }else if(today==5){
                    todayStr="周二";
                }else if(today==1){
                    todayStr="周一";
                }
        }

}
3-4 回文数字
import java.util.Scanner;
class test04{
    public static void main(String[] args){
        //1.输入一个数字
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个三位数:");
        int num=scanner.nextInt();
        int temp=num;
        //2.拼接出该数字的反序
        int sum=0;
        sum=sum*10+num%10;
        num/=10;
        sum=sum*10+num%10;
        num/=10;
        sum=sum*10+num%10;
        num/=10;
        if(sum==temp){
            System.out.println("是回文");
        }else{
            System.out.println("不是回文");
        }
    }
}
3-5 彩票游戏
import java.util.*;
class test05{
    public static void main(String[] args){
        //1.
        Scanner scanner=new Scanner(System.in);
        int cp = 0;
            
        int r = new Random().nextInt(99 - 10 + 1) + 10;

        System.out.println("请输入一个两位数");

        int input = scanner.nextInt();
        if (input < 10 || input > 99) {
            System.out.println("请输入10-99");
            return;
        }
        int sw = r / 10; //随机数十位
        int gw = r % 10;//随机数个位


        int s = input / 10;  //输入数十位
        int g = input % 10;  //输入数个位

        if (r == input) {
            cp = 10000;
        } else if ((gw == g || sw == s) && (gw == s || sw == g)) {
            cp = 3000;
        } else if (sw == s || gw == g) {
            cp = 1000;
        } else {
            System.out.println("您未中奖");
        }
        System.out.println("本次中奖的号码为" + r);
        System.out.println("你的奖金为" + cp);
    }
}
3-6 石头剪刀布游戏
import java.util.Random;
import java.util.Scanner;
class test06{
    public static void main(String[] args){
        //1.
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入 剪刀0 石头1 布2:");
        int usr=scanner.nextInt();
        //2.
        Random random=new Random();
        int com=random.nextInt(3);

        String usrStr="";
        String comStr="";
        switch(usr){
            case 0: //if usr==0
                usrStr="剪刀"; 
                break;
            case 1:// if usr==1
                usrStr="石头";
                break;
            case 2:// if usr==2
                usrStr="布";
                break;
        }
        switch(com){
            case 0: 
                comStr="剪刀"; 
                break;
            case 1:
                comStr="石头";
                break;
            case 2:
                comStr="布";
                break;
        }
        //3.
        if(usr==com){
            System.out.printf("用户是%s,电脑是%s,平局",usrStr,comStr);
        }else if(usr==0&&com==2 || usr==1&&com==0 || usr==2&&com==1){
            System.out.printf("用户是%s,电脑是%s,用户赢",usrStr,comStr);
        }else{
            System.out.printf("用户是%s,电脑是%s,用户输",usrStr,comStr);
        }
    }
}
3-7 某天是星期几
import java.util.*;
class test07{
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.print("Enter year(e.g 2012):");
        int year=input.nextInt();
        System.out.print("Enter month(1-12):");
        int month=input.nextInt();
        System.out.print("Enter the day of the month(1-31):");
        int day=input.nextInt();
        int h=(day+(26*(month+1)/10)+year%100+(year%100/4)+year/100/4+5*year/100)%7;//克里斯汀-泽勒计算某天是星期几的算法公式
        switch(h){
            case 0: System.out.println("是星期六");
                    break;
            case 1: System.out.println("是星期日");
                    break;
            case 2: System.out.println("是星期一");
                    break;
            case 3: System.out.println("是星期二");
                    break;
            case 4: System.out.println("是星期三");
                    break;
            case 5: System.out.println("是星期四");
                    break;
            case 6: System.out.println("是星期五");
                    break;
            }
    }
}
3-8 点是否在圆内
import java.util.Scanner;
class test08{
    public static void main(String[] args){
        //1.
        Scanner scanner=new Scanner(System.in);
        System.out.print(" 请输入坐标点:");
        double x=scanner.nextDouble();
        double y=scanner.nextDouble();
        double xo=0;
        double yo=0;
        double radius=10;
        double distance=Math.sqrt(Math.pow(x-xo,2)+Math.pow(y-yo,2));
        if(distance>radius){
            System.out.println("点在圆外");
        }else if(distance==radius){
            System.out.println("点在圆上");
        }else{
            System.out.println("点在圆内");
        }
    }
}
3-9 判断点是否在三角形内
import java.util.Scanner;
class test09{
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("输入一个坐标点(x,y): ");
        double x = input.nextDouble();
        double y = input.nextDouble();
        double a = (200 - x ) / 200 * 100;
        double b = (100 - y ) / 100 * 200;
        if(x <= b && y <= a){
            System.out.println("这个点在三角形内");
        } else{
            System.out.println("这个点在三角形外");
        }

    }
}

 

 

3-10 判断两个矩形
import java.util.Scanner;
class test10{
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input=new Scanner(System.in);
        System.out.print("Enter r1's center x-,y-coordinates,width,and height:");
        double r1_xCoordinates=input.nextDouble();
        double r1_yCoordinates=input.nextDouble();
        double r1_width=input.nextDouble();
        double r1_height=input.nextDouble();
        System.out.print("Enter r2's center x-,y-coordinates,width,and height:");
        double r2_xCoordinates=input.nextDouble();
        double r2_yCoordinates=input.nextDouble();
        double r2_width=input.nextDouble();
        double r2_height=input.nextDouble();
//      double dis=Math.sqrt(Math.pow((r2_xCoordinates-r1_xCoordinates), 2)+Math.pow((r2_yCoordinates-r1_yCoordinates), 2));
        //两点之间的距离计算公式
        if(Math.abs(r1_xCoordinates-r2_xCoordinates)>(r1_width/2+r2_width/2)&&Math.abs(r1_yCoordinates-r2_yCoordinates)>(r1_height/2+r2_height/2)){
            System.out.println("相离");
        }else if(Math.abs(r1_xCoordinates-r2_xCoordinates)<=(Math.abs(r1_width-r2_width))*0.5&&Math.abs(r1_yCoordinates-r2_yCoordinates)<=(Math.abs(r1_height-r2_height))*0.5){
            System.out.println("包含");
        }else
            System.out.println("相交");
        }
}
3-11 判断最大公约数
import java.util.*;
class test12{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入两个数字:");
        int n1=scanner.nextInt();
        int n2=scanner.nextInt();
        int gcd=1;
        for(int i=n1<n2?n1:n2;i>=1;i++){
            if(n1%i==0&&n2%i==0){
                gcd=i;
                break;
            }
        }
        System.out.println(gcd);
    }

}
3-13 找出一个整数的因子
import java.util.*;
class test13{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int num=scanner.nextInt();
        while(true){
            for(int i=2;i<=num;i++){
                if(num%i==0){
                    System.out.print(i+" ");
                    num=num/i;
                    break;
                }
            }
            if(num==1){
                break;
            }
        }
    }
}
3-14 显示金字塔
import java.util.*;
class test14{
    public static void main(String[] args){
        // 显示数字金字塔
        Scanner input = new Scanner(System.in);
        for(int i = 1; i <= 7; i++){   //行数为设定的那个数值
            for(int j = 0; j <= 7-i;j++){   //空格站位
                System.out.print("  ");
            }
            for(int m = i; m > 0 ; m--){   //打印从设定的数自减到1
                System.out.print(m+" ");
            }
            for(int k = 2; k <= i; k++){   //打印从2开始自增到设定的数
                System.out.print(k+" ");
            }
            System.out.println();  //换行打印
        }
        
    }
}
3-15 打印四个图案
import java.util.*;
class test15_1{
    public static void main(String[] args){
        // 显示数字金字塔
        Scanner input = new Scanner(System.in);
        for(int i=1;i<=6;i++){
            for(int j=1;j<=6-i;j++);{
                System.out.print(" ");
            }
            for(int j=1;j<=i;j++){
                System.out.print(j+" ");
            }
            System.out.println();
        }
    }
}

import java.util.*;
class test15_2{
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        for (int i = 1;i <= 7;i++) {
            for(int j = 1;j <=7-i;j++){
            System.out.print(j+" ");
            }
            System.out.println();
        }
    }
}


import java.util.*;
class test15_3{
    public static void main(String[] args){
        // 显示数字金字塔
        Scanner input = new Scanner(System.in);
        for(int i=1; i<=6; i++) {
            for(int j=(6-i)*3-1; j>=0; j--) {
                System.out.print(" ");
            }
            for(int j=i; j>=1; j--) {
                if(j<10)
                    System.out.print("  ");
                    System.out.print(j);
            }
             System.out.println("");
         }

    }
}

import java.util.*;
class test15_4{
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        for(int i=1; i<=6; i++) {
            for(int k=1; k<i; k++) {
                System.out.print("   ");
            }
            for(int j=1;j<=(6-i)+1;j++) {
                System.out.print("  ");
                System.out.print(j);
            }
             System.out.println("");
         }

    }
}   
3-16 打印2的n次幂数字金字塔
import java.util.Scanner;
public class test16{
        public static void main(String[] args) {
            Scanner input=new Scanner(System.in);
            for(int i=1;i<=8;i++){
                for(int j=0;j<8-i;j++){
                    System.out.print("\t"); //\t表示从数字算起到下一个数字之间的间隔为8
                }
                for(int j=1;j<Math.pow(2, i);j*=2){ //j*2一直到j>=i^2
                    System.out.print("\t"+j);
                }
                for(int j=(int)Math.pow(2, i-2);j>0;j/=2){ //j/2一直到j>0
                    System.out.print("\t"+j);
                }
                System.out.println();
            }

    }
}
3-17 打印2-1000之间的素数
//打印2-1000之内的素数
import java.util.*;
class test17{
    public static void main(String[] args){
        int count=0;
        for(int num=2;num<=1000;num++){
            boolean flag=true;
            for(int i=2;i<=num-1;i++){
                if(num%i==0){
                    flag=false;
                    break;
                }
            }
            if(flag){
                count++;
                System.out.print(num+"   ");
                if(count%8==0){
                    System.out.println();
                }
            }
        }
    }
}
3-18
//计算 Π
import java.util.*;
class test18{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int n=scanner.nextInt();
        double sum=0;
        double flag=1;
        for(int i=1;i<=n;i++){
            //sum+=Matn.pow(-1.0,i+1)/(2*i-1)
            sum+=flag/(2*i-1);
            flag=-flag;
        }
        double pi=sum*4;
        System.out.print(pi);
    }
}
3-19
//计算e
import java.util.*;
class test19{
    public static void main(String[] args){
            Scanner scanner=new Scanner(System.in);
            System.out.print("请输入一个数字:");
            int imax=scanner.nextInt();
            double e=1;
            double item=1.0;
            for(int i=1;i<=imax;i++){
                item=item*i;    //n!=(n-1)*n;
                e+=1/item;
        }
        System.out.println(e);
    }
}
3-20
//显示闰年
import java.util.*;
class test20{
    public static void main(String[] args){
        int count=0;
        for(int i=101;i<=2100;i++){
            if(i%4==0&&i%100!=0 || i%400==0){
                count++;
                System.out.print(i+" ");
                if(count%10==0){
                    System.out.println();
                }
            }
        }
        System.out.println("\n闰年一共有"+count+"个");
    }
}
3-21
//10000以内的完全数
import java.util.*;
class test21{
    public static void main(String[] args){
        int sum=0;
        for(int n=2;n<=10000;n++){
            for(int i=1;i<=n/2;i++){
                if(n%i==0){
                    sum+=i;
                }
            }
            if(n==sum){
                System.out.println("完全数"+n);
            }
        }
    }
}
3-22 剪刀石头布游戏,输出先赢两次的结果
import java.util.*;
class test22{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        Random random=new Random();
        int usrWin=0;
        int comWin=0;
        while(true){
            System.out.print("请输入剪刀0 石头1布2:");
            int usr=scanner.nextInt();
            int com=random.nextInt(3);
            String usrStr = "";
            String comStr = "";
            switch(usr){
                case 0:
                    usrStr = "剪刀"; 
                    break;
                case 1:
                    usrStr = "石头";
                    break;
                case 2:
                    usrStr = "布";
                    break;
            }
            switch(com){
                case 0: 
                    comStr = "剪刀"; 
                    break;
                case 1:
                    comStr = "石头";
                    break;
                case 2:
                    comStr = "布";
                    break;
            }
            if(usr==com){
                System.out.printf("用户是%s,电脑是%s,平局\n",usrStr,comStr);
            }else if(usr==0&&com==2 || usr==1&&com==0 || usr==2&&com==1){
                System.out.printf("用户是%s,电脑是%s,用户赢\n",usrStr,comStr);
                usrWin++;
            }else{
                System.out.printf("用户是%s,电脑是%s,用户输\n",usrStr,comStr);
                comWin++;
            }
            if(usrWin==2||comWin==2){
                break;
            }
        }
        if(usrWin==2){
            System.out.println("最终玩家赢!");
        }else{
            System.out.println("最终电脑赢!");
        }
    }
}
3-23 
//十进制转二进制
import java.util.Scanner;
class test23{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int num=scanner.nextInt();
        String binStr="";
        while(true){
            binStr=num%2+binStr;//"1100"
            num/=2;
            if(num==0){
                break;
            }
        }
        System.out.println(binStr);
    }
}
3-24
//最大数的出现次数
import java.util.Scanner;
class test24{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        int num=0;
        int max=0;
        int count=0;
        System.out.print("请输入数字:");
        while(true){
            num=scanner.nextInt();
            if(num==0){
                break;
            }else if(num>max){
                max=num;
                count=1;
            }else if(num==max){
                count++;
            }
        }
        System.out.println("max="+max+",count="+count);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值