Java基础 - 第一章 计算

#1.1 第一个Java程序

package my.hava.javabasis.lesson;

/**
 * Created by zhanpeng on 2016/10/10.
 */
public class Lesson1_1 {

    public static void main(String [] args)
    {
        System.out.println("Hello World");
    }
}

程序输出

Hello World

Process finished with exit code 0

#1.2 用变量做计算 ##1.2.1 读输入 ###如何去读

package my.hava.javabasis.lesson;

import java.util.Scanner;

/**
 * Created by zhanpeng on 2016/10/10.
 */
public class Lesson1_2 {
    public static void main(String [] args)
    {
        System.out.println("中文");
        //读取用户输入
        Scanner in = new Scanner(System.in);
        System.out.println(in.nextLine());
    }
}

###课堂题目 每次输入的内容只有在按下回车(Enter)键之后才会被程序读到。
A.√
B.×
正确答案: A

package my.hava.javabasis.lesson;

import java.util.Scanner;

/**
 * Created by zhanpeng on 2016/10/10.
 */
public class Lesson1_2 {
    public static void main(String [] args)
    {
        System.out.println("中文");
        //读取用户输入
        Scanner in = new Scanner(System.in);
        System.out.println("echo:" + in.nextLine());
        System.out.println(2+3+"=2+3=" + (2+3));
    }
}

程序输出

中文
hello world
echo:hello world
5=2+3=5

Process finished with exit code 0

##1.2.2 变量

package my.hava.javabasis.lesson1;

import java.util.Scanner;

/**
 * Created by zhanpeng on 2016/10/10.
 */
public class Lesson1_2 {
    public static void main(String [] args)
    {
        System.out.println("中文");
        //读取用户输入
        Scanner in = new Scanner(System.in);
//        System.out.println("echo:" + in.nextLine());
        int price = in.nextInt();
        System.out.println("100-" + price + "=" + (100 - price));
    }
}

输出

中文
33
100-33=67

Process finished with exit code 0

###题目 int price;
这句定义了一个变量
A.√
B.×
正确答案: A 你选对了

###变量定义

  • 变量定义的一般形式就是:
    • <类型名称> <变量名称>;

如下为例子

int price;
int amount;
int price,amount;

###变量的名称

  • 变量需要一个名字,变量的名字是一种“标识符”,意识是它是用来识别这个和那个的不同名字。
  • 标识符有标识符的构造规则。基本的原则是:标识符只能由字母、数字和下划线组成,数字不可以出现在第一个位置上,Java的关键字(有的地方叫它们保留字)不可以用做标识符。

###Java保留字 输入图片说明

###变量类型

  • int price = 0;
  • 这一行,定义了一个变量。变量的名字是price,类型是int,初始值是0。
  • Java是一种强类型语言,所有的变量在使用之前必须定义或者生命,所有的变量必须具有确定搞得数据类型。数据类型表示在变量中可以存放什么样的数据,变量中只能存放指定类型的数据,程序运行过程中也不能改变变量的类型。

##1.2.3 赋值

###异常

package my.hava.javabasis.lesson1;

import java.util.Scanner;

/**
 * Created by zhanpeng on 2016/10/10.
 */
public class Lesson1_2 {
    public static void main(String [] args)
    {
        System.out.println("中文");
        //读取用户输入
        Scanner in = new Scanner(System.in);
//        System.out.println("echo:" + in.nextLine());
        //变量初始化
        int price = 0, amount = 0;
        System.out.println(price);
        price = in.nextInt();
        System.out.println("100-" + price + "=" + (100 - price));
    }
}

输出异常

中文
0
price
Exception in thread "main" java.util.InputMismatchException
	at java.util.Scanner.throwFor(Scanner.java:909)
	at java.util.Scanner.next(Scanner.java:1530)
	at java.util.Scanner.nextInt(Scanner.java:2160)
	at java.util.Scanner.nextInt(Scanner.java:2119)
	at my.hava.javabasis.lesson1.Lesson1_2.main(Lesson1_2.java:18)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

Process finished with exit code 1

###代码

package my.hava.javabasis.lesson1;

import java.util.Scanner;

/**
 * Created by zhanpeng on 2016/10/10.
 */
public class Lesson1_2 {
    public static void main(String [] args)
    {
        System.out.println("你好");
        //读取用户输入
        Scanner in = new Scanner(System.in);
//        System.out.println("echo:" + in.nextLine());
        //变量初始化
        int amount = 100;
        int price = 0;
        System.out.println("[amount]:" + amount);
        System.out.println("[price]:" + price);
        price = in.nextInt();
        System.out.println(amount + "-" + price + "=" + (amount - price));
    }
}

###题目 当amount的值为100,price的值为20,以下哪一种写法能输出:100-20=80

A.System.out.println("amount-price="+amount-price);

B.System.out.println(amount+"-"+price+"="+(amount-price));

C.System.out.println("amount-"+price+"="+amount-price);

D.System.out.println(amount-price=(amount-price)); 正确答案: B

###程序

package my.hava.javabasis.lesson1;

import java.util.Scanner;

/**
 * Created by zhanpeng on 2016/10/10.
 */
public class Lesson1_2 {
    public static void main(String [] args)
    {
        System.out.println("你好");
        //读取用户输入
        Scanner in = new Scanner(System.in);
//        System.out.println("echo:" + in.nextLine());
        //变量初始化
//        final int amount = 100;
        int amount = 100;
        int price = 0;
        System.out.println("[amount]:" + amount);
        System.out.println("[price]:" + price);
        System.out.println("请输入票面:");
        amount = in.nextInt();
        System.out.println("请输入金额:");
        price = in.nextInt();
        System.out.println(amount + "-" + price + "=" + (amount - price));
    }
}

输出结果

你好
[amount]:100
[price]:0
请输入票面:
100
请输入金额:
50
100-50=50

Process finished with exit code 0

##变量课件 ###读输入

Scanner in = new Scanner(System.in);
System.out.println(in.nextLine());
  • 将第一行抄在笔记本上,任何需要读用户输入的程序都需要这行
  • 输入Scan之后,按下键盘上的Alt+/,让Eclipse自动为你补全必要的代码

###运行

  • 输入也在终端窗口中
  • 红色的方块表示程序正在运行
  • 输入时以行为单位进行的,行的结束标志就是你按下了回车键。在你按下回车之前,你的程序不会读到任何东西

###读入一行文字

  • System.out.println(in.nextLine());
  • 让in对象做读入下一行的动作,结果交给System.out这个对象进行打印

###字符串的+

  • 用来连接两个字符串形成更长的字符串
System.out.println("Hello" + " world.");//Hello world.
System.out.println("Hello" + 2);//Hello2
System.out.println("Hello" + 2 + 3);//Hello5
System.out.println(2 + 3 + "Hello");//5Hello

###try

  • 在输出的时候加上文字表明是否回答而非单纯的重复

###找零计算

  • 输入一个表示应该付多少元的数字,比如12,它告诉你88,意思是如果你付100
Scanner in = new Scanner(System.in);
int price = 0;
price = in.nextInt();
int change = 100 - price;
System.out.println(change);

###变量

  • int price = 0;
  • 这一行,定义了一个变量。变量的名字是price,类型是int,初始值是0。
  • 变量是一个保存数据的地方,当我们需要在程序里保存数据时,比如上面的例子中药记录用户输入的架构,就需要一个变量来保存它。用一个变量保存了数据,它才能参加到后面的计算中,比如计算找零。

###变量定义

  • 变量定义的一般形式就是:
    • <类型名称> <变量名称>;

如下为例子

int price;
int amount;
int price,amount;

###变量的名字

  • 变量需要一个名字,变量的名字是一种“标识符”,意识是它用来识别这个和那个的不同的名字。
  • 标识符有标识符的构造规则。基本的原则是:标识符只能由字母、数字和下划线组成,数字不可以出现在第一个位置上,Java的关键字(有的地方叫它们保留字)不可以用做标识符。

###Java保留字

###quiz

  • 以下哪些标识符是符合规则的?
    • currency √
    • lastName √
    • fireplace √
    • _last_name√
    • xingming√
    • class×
    • goto×
    • 4ever×
    • time-machine×
    • Int√
    • $12×
    • 我是变量×

###赋值和初始化

  • int price = 0;
  • 这一行,定义了一个变量。变量的名字是price,类型是int,初始值是0。
  • price=0是一个式子,这里的=是一个赋值运算符,表示将=右边的值赋给左边的变量。

###赋值 和数学不同,a=b在数学中表示关系,即a和b的值一样;而在Java中,a=b表示要求计算机做一个动作:将b的值赋给a。关系是静态的,而动作是动态的。在数学中,a=b与b=a是等价的,而在Java中,两者的意思完全相反

###初始化 当赋值发生在定义变量的时候,就像程序中的第7行那样,就是变量的初始化。虽然Java语言并没有强制要求所有的变量都在定义的地方做初始化,但是要求所有的变量在第一次被使用(出现在赋值运算符的右边)之前被赋值

###变量初始化

  • <类型名称> <变量名称> = <初始值>;
  • int price = 0;
  • int amount = 100;
  • 组合变量定义的时候,也可以在这个定义中单独给单个变量赋值,如
  • int price = 0,amount = 100;

###插入

  • 写出以下变量的初始值:
    • int price,amount =100,age;

回答 price == 0,amount == 100,age == 0

###读整数

  • price = in.nextInt();
  • 要求in这个对象做读入下一个整数的动作,读到结果赋值给变量price
  • 如果用户输入的不是整数会怎样?
    会报如下异常
Exception in thread "main" java.util.InputMismatchException
	at java.util.Scanner.throwFor(Scanner.java:864)
	at java.util.Scanner.next(Scanner.java:1485)
	at java.util.Scanner.nextInt(Scanner.java:2117)
	at java.util.Scanner.nextInt(Scanner.java:2076)
	at my.hava.javabasis.lesson1.Lesson1_2.main(Lesson1_2.java:22)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

###表达式

  • "="是赋值运算符,有运算符的式子叫做表达式。
  • price=0;
  • change = 100 - price;

###try

  • 给程序增加一个int类型变量:bill,初始化为100。在计算change时,用变量bill代替100。
  • 这个变量在哪里定义合适?
    **回答:**环境变量并不充分,如果bill不在发生变更,则应该在class声明为类的static final变量。这样在JVM载入时默认会把100值载入。提高效率。

###变量类型

  • 这一行,定义了一个变量。变量的名字是price,类型是int,初始值是0.
  • Java是一种强类型语言,所有的变量在使用之前必须定义或声明,所有的变量必须具有确定的数据类型。数据类型表示在变量中可以存放什么样的数据,变量中只能存放指定类型的数据,程序运行过程中也

###常量

  • int change = 100 - price;
  • 固定不变的数,是常数。直接写在程序里,我们称作直接量(literal)。
  • 更好的方式,是定义一个常量:
    • final int AMOUNT = 100;

###final

  • final是一个修饰符,加在int的前面,用来给这个变量加上一个final(最终的)的属性。这个final的属性表示这个变量的值一旦初始化,就不能再修改了。
    • int change = AMOUNT - price;
  • 如果你试图对常量做修改,把它放在赋值运算符的左边,就会被Java发现,指出为

###try

  • 让用户输入变量bill的值,而不是使用固定的初始值

###tips

  • 程序要求读入多个数字时,可以在一行输入,中间用空格分开,也可以在多行输入
  • 每次召唤in.nextInt(),它就等待用户输入一个整数

#1.3 表达式(浮点数、优先级和类型转换) ##浮点数 ###身高5尺7寸?

  • 美国人固执地使用英制计量单位,他们习惯用几尺几寸(英尺英寸)来报自己的身高。如果遇到一个美国人告诉你他是5英尺7,他的身高应该是一米几呢?
  • (5 + 7/12) * 0.3048 = 1.7018米

###计算身高的程序 - 问题代码

package my.hava.javabasis.lesson1;

import java.util.Scanner;

/**
 * Created by yanfa on 2016/10/10.
 */
public class Lesson1_3 {

    public static void main(String [] args){
        int foot; //英尺
        int inch; //英寸

        Scanner in = new Scanner(System.in);
        System.out.println("请输入身高:");
        System.out.print("英尺:");
        foot = in.nextInt();
        System.out.print("英寸:");
        inch = in.nextInt();

        double result = (foot + inch/12) * 0.3048;
        System.out.println("身高:" + result);
    }
}

错误输出

请输入身高:
英尺:5
英寸:7
身高:1.524

###为什么是1.524

  • 因为两个整数的运算的结果只能是整数
    • 10/3 * 3= 9
  • 10和10.0在Java中是完全不同的数
  • 10.0是浮点数

###课堂测试 在Java中10/3的结果是?

正确答案:3

###计算身高的程序 - 正确代码 **注意:**在做除法的时候先进行强制类型转换

package my.hava.javabasis.lesson1;

import java.util.Scanner;

/**
 * Created by yanfa on 2016/10/10.
 */
public class Lesson1_3 {

    public static void main(String [] args){
        int foot; //英尺
        int inch; //英寸

        Scanner in = new Scanner(System.in);
        System.out.println("请输入身高:");
        System.out.print("英尺:");
        foot = in.nextInt();
        System.out.print("英寸:");
        inch = in.nextInt();

        double result = (foot + (double)inch/12) * 0.3048;
        System.out.println("身高:" + result);
    }
}

输出结果

请输入身高:
英尺:5
英寸:7
身高:1.7018

###浮点数

  • 带小数点的数值。浮点这个词的本意就是小数点是浮动的,是计算机内部表达非整数(包含分数和无理数)的一种方式。另一种方式叫做定点数,不过在Java中不会遇到定点数。人们借用浮点数这个词来表达所有的带小数点的数。

###程序改进

  • (foot +inch/12) * 0.3048;
  • (foot +inch/12.0) * 0.3048;
  • 当浮点数和整数放到一起运算时,Java会将整数转换成浮点数,然后进行浮点数的运算。

###double

  • inch是定义为int类型的变量,把int换成double,我们就把它改为double类型的浮点数变量。
  • double的意思是双,本来是双精度浮点数的第一个单词,人们用来表示浮点数类型

###浮点运算的精度

  • 浮点计算是有误差的:
    • System.out.println(1.2 - 1.1);
      输出结果
0.09999999999999987

###整数

  • 整数类型不能表达有小数部分的数,整数和整数的运算结果还是整数。计算机里会有纯粹的整数这种奇怪的东西,是因为整数的运算比较快 ,而且占地方也小。其实人们日常生活中大量做的还是纯粹整数的计算,所以整数的用处还是很大的。

###讨论

  • 如果把程序里的inch变量换成double类型,那句语句后面的in.nextInt()还正确吗?

**回答:**正确,Java程序会自动从低精度转换成高精度。

###随堂

  • 用一个变量meter来记录身高换算的结果,最后在System.out.println()里面输出这个meter变量的值。 ##运算符优先级 输入图片说明

###单目运算符

  • 只有一个算子的运算符: +,-
int a = 10;
int b = -20;
System.out.println(a * -b);

###结合关系

  • 一般自左向右
  • 单目+ - 和赋值=是自右向左
result = a = b = 3 + c;
result = 2;
result = (result = result * 2) * 6 * (result = 3 + result);
//上面的式子先计算了左边的result=,得到result=4,然后在计算右边的result=,得到result=7。则最终结果是168

###插入

  • 6 + 5/4 -2=5
  • 2 + 2 * (2 * 2 - 2)%2/3 = 2
  • 10 + 9 * ((8 + 7) % 6) + 5 * 3 % 3 * 2 + 3 = 40
  • 1 + 2 + (3 + 4) * ((5 * 6 % 7 / 8) - 9) * 10 = -627

###强制类型转换

  • 身高是1.524米
  • System.out.println((foot + inch /12) * 0.3048 * 100);

###随堂测试 以下哪句能把浮点数转换成整数?

A. (int)12.4

B. int(12.4)

C. int 12.4

D. 12.4=int 正确答案: A 你选对了

###强制类型转换

  • 如果想把一个浮点数的小数部分去掉,编程整数
int i = 32 / 3.0;
int i = (int)(32 / 3.0);
  • (类型)值

###身高?

  • System.out.println( (int)((foot
  • inch / 12) * 0.3048 * 100));

###强制类型转换

double b = 10.3;
int a = (int)b;
  • 只是从那个变量计算出了一个新的类型的值,它并不改变那个变量,无论是值还是类型都不改变

###强制类型转换

double a = 1.0;
double b = 2.0;
int i = (int)a /b;//int i = (int)(a/b);
  • 强制类型转换的优先级高于四则运算
double a = 1.0;
double b = 2.0;
double d = (double) (a /b );

转载于:https://my.oschina.net/hava/blog/756539

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值