02-基本程序设计

02-基本程序设计

  • 2.1 引言
    • 学习程序设计基础技术,以进行问题的求解。
  • 2.2 编写简单的程序
    • 在源代码中,字符串常量不能跨行,因此,下面的的语句就会导致错误。
    ```java
    package chapter01;
    
    public class Code_10 {
        public static void main(String[] args){
            System.out.println("Introduction to Java Progranmming,a
                    by xxx");
        }
    }
    
    ```
    那么正确的代码是:
    

    ```java
    package chapter01;
    
    public class Code_10 {
        public static void main(String[] args){
            System.out.println("Introduction to Java Progranmming," +
                    "by xxx");
        }
    }
    
    ```
  • 2.3 从控制台读取输入
    • 可以使用Scanner类从控制台输入。Java使用System.out来表示标准输出设备,用System.in来表示标准输入设备。
    • 示例:
    ```java
    Scanner input=new Scanner(System.in);
    ```
- 可以使用nextDouble()方法来获取一个double类型的值。当然这样类似的方法有很多(next()、nextInt()、nextFloat()......),不仅仅是这一种。至于这几种方法之间的区别,[点击这里查看](https://blog.csdn.net/a_yingxuexin/article/details/51842533)。


    ```java
    package chapter01;
    
    import java.util.Scanner;
    
    public class Code_10 {
        public static void main(String[] args){
            Scanner input=new Scanner(System.in);
            double s=input.nextDouble();
        }
    }
    
    ```
- Scanner类位于java.util包中,在第3行导入,第6行创建了一个Scanner对象,如果第6行用java.util.Scanner代替Scanner的话,import是可以直接省略的。
- 这里顺便讲述一下print和println方法。print和println方法功能类似,两者的不同之处在于:当显示字符串之后,println会将光标移至下一行,而print则不会这样。
- 有两种类型的import语句:(二者的执行效率基本一样)
    - 明确导入:是在import语句中指定单个的类。
    

        ```java
        import java.util.Scanner;
        ```
    - 通配符导入:是指通过使用星号(*)作通配符,导入一个包中所有的类。     
    

        ```java
        import java.util.*;
        ```
  • 2.4 标识符
    • 标识符的规则:
      • 标识符是由字母、数字、下划线(_)和美元符号($)构成的字符序列。
      • 标识符必须以字母、下划线(_)和美元符号($)开头,不能以数字开头。
      • 标识符不能是保留字
      • 标识符不能是true、false、null。
      • 标识符可以为任意长度。
    • Java是区分大小写的。
    • 不要用字符$命名标识符。习惯上,字$只用在机器自动产生的源代码中。
  • 2.5 变量
    • 在赋值给变量之前,必须声明变量。方法中声明的变量在使用之前必须被赋值。
  • 2.6 赋值语句和赋值表达式
    • 在Java中,将等号(=)作为赋值操作符。赋值语句的语法如下:
    ```java
    variable=expression;//(变量=表达式)
    ```
- 可以在表达式中使用变量。变量还可以同时出现在赋值操作符=的两边。

    
    ```java
    x = x + 1;
    ```
- 在赋值语句中,左边变量的数据类型必须与右边变量的数据类型兼容。例如,int x=1.0是错误的,因为1.0是double类型的,这样的数据是不能直接赋值给int类型的变量的。
  • 2.7 命名变量
    • 命名变量是一个代表不变值的标识符。
    • Java中常量也称为final修饰的变量。下面是生命常量的语法:
    ```java
    final datatype CONSTANTNAME=value;
    ```
- 常量必须在同一条语句中生声明和赋值。习惯上,常量中的所有字母都是大写的。
- 使用常量的三大好处:
    - 1、当一个值多处使用的时候,不必重复输入。
    - 2、如果必须修改常量值,只需在源代码中的一个地方做改动。
    - 3、给常量赋一个描述性的名字会提高程序的可读性。
  • 2.8 命名习惯

    • 使用小写字母命名变量和方法,如果一个命名包含多个单词,就讲他们连在一起,第一个单词的字母小写,而后面的每个单词的首字母大写。例如,变量numberOfStudents。这样的命名风格称为驼峰命名法
    • 类名中的每个单词的首字母大写。
    • 常量中的所有字母大写,两个单词间用下划线连接。例如,常量PI和常量MAX_VALUE。
    • 命名类时不要选择Java库中已经使用的名称。
  • 2.9 数值数据类型和操作

    • 2.9.1 数值类型
      • Java使用四种类型的整数:byte、short、int和long。
      • Java使用两种类型的浮点数:float和double。
    • 2.9.2 从键盘读取数值
      <center>Scanner对象的方法</center>
    方法 描述
    nextByte() 读取一个byte类型的整数
    nextShort() 读取一个short类型的整数
    nextInt() 读取一个int类型的整数
    nextLong() 读取一个long类型的整数
    nextFloat() 读取一个float类型的数
    nextDouble() 读取一个double类型的数
    • 2.9.3 数值操作符
      • 当除法的操作数都是整数时,除法的结果就是整数,小数部分被舍去。为了实现浮点数的除法,其中一个操作数必须是浮点数。
      • 操作符%通常用在正整数上,实际上他也可以用于负整数和浮点值。只有当被除数是负数时,余数才是负的。
        ```java
        package chapter01;
        
        public class Code_10 {
            public static void main(String[] args){
                System.out.println(3+1);
                System.out.println(3.0+1);
                System.out.println(3-1);
                System.out.println(3.0-1);
                System.out.println(3*1);
                System.out.println(3.0*1);
                System.out.println(3/2);
                System.out.println(3.0/2);
                System.out.println(-3.0/2);
                System.out.println(3.0/-2);
                System.out.println(3%2);
                System.out.println(3%-2);
                System.out.println(-3%2);
            }
        }
        
        ```
        结果显示:
        
        ```java
        4
        4.0
        2
        2.0
        3
        3.0
        1
        1.5
        -1.5
        -1.5
        1
        1
        -1
        
        Process finished with exit code 0
        
        ```
- 2.9.4 幂运算
    - Math.pow(a,b)
  • 2.10 数值型字面值
    字面值是程序中直接出现的常量值。例如,下面的语句中34和0.305都是字面值。

    int numberOfYears = 34;
    double weight = 0.305;
    
    • 2.10.1 整型字面值
      • 默认情况下,整型字面值是一个十进制整数。要表示一个二进制整数字面值,在数字面前使用0b或者0B(零B);要表示一个八进制整数字面值,在数字前使用0(零);而要表示一个十六进制整数字面值,在数字前使用0x或者0X(零X)。例如:
        ```java
        package chapter01;
        
        public class Code_10 {
            public static void main(String[] args){
                System.out.println(0B1111);//Displays 15
                System.out.println(07777);//Displays 4095
                System.out.println(0XFFFF);//Displays 65535
            }
        }
        
        ```
    - 为了提高可读性,Java允许在一个数值型字面值的两个数字间使用下划线。例如,下面的字面值是正确的:
    

        ```java
        long ssn = 232_45_4519;
                long creditCardNumber = 2324_4545_4519_3415L;
        ```
        然而,45_和_45是不正确的,下划线必须在两个数字之间的。
- 2.10.2 浮点型字面值
- 2.10.3 科学计数法
    - 浮点型字面值也可以用a x 10^b形式的科学计数法表示。
  • 2.11 表达式求值以及操作符优先级
    • 操作符的优先级规则用于确定计算的次序:首先计算乘法、除法和求余计算。如果表达式包含若干个乘法、除法和求余操作符,可按照从左到右的顺序执行。最后执行加法和减法运算。如果表达式中包含若干个加法和减法操作符,则按照从左到右的顺序执行。
  • 2.12 示例学习:显示当前时间
    • 可以通过调用System.currentTimeMillis()返回当前时间。
    ```java
    package chapter01;
    
    public class ShowCurrentTime {
        public static void main(String[] args){
            long totalMilliseconds = System.currentTimeMillis();
            long totalSeconds = totalMilliseconds / 1000;
            long currentSecond = totalSeconds % 60;
            long totalMinutes = totalSeconds / 60;
            long currentMinute = totalMinutes % 60;
            long totalHours = totalMinutes / 60;
            long currentHour = totalHours % 24;
            System.out.println("Current time is " + currentHour + ":" + currentMinute + ":" + currentSecond + " GMT");
        }
    }
    
    ```
  • 2.13 增强赋值操作符
    • 操作符+ 、-、*、/、%可以结合赋值操作符形成增强操作符。
      <center>简捷赋值操作符</center>
      | 操作符 |名称 |示例|等价于|
      |--|--|--|--|
      | += | 加法赋值操作符 | i += 8 | i =i + 8|
      | -=| 减法赋值操作符| i -= 8 | i =i - 8 |
      | *=| 乘法赋值操作符| i *= 8 | i =i * 8 |
      | /=| 除法赋值操作符| i /= 8 |i =i / 8 |
      | %= | 求余赋值操作符| i %= 8 | i =i % 8 |

    • 在增强操作符中是没有空格的。例如,+ =应该是+=。

  • 2.14 自增和自减操作符
    • 自增操作符(++)和自减操作符(--)对变量进行加1和减1的操作。
    • i++读为i加加,i--读为i减减,这些操作符分别称为后置自增操作符和后置自减操作符,因为操作符++和--放在变量后面。
    • ++i将i加1,--i将i减1。这些操作符称为前置自增操作符和前置自减操作符。
  • 2.15 数值类型转换
    • 总是可以将一个数值赋给支持更大数值范围的类型的变量,如果不进行类型转换,就不能将一个值赋给范围较小的类型的变量。将范围较小的类型转换为范围更大的类型称为扩展类型,而将范围较大的类型转换为范围较小的类型称为缩小类型。Java将自动扩展为一个类型,但是缩小类型必须显示完成。
    • 使用类型转换时必须小心,丢失的信息也许会导致不精确的结果。
    • 类型转换不改变被转换的变量。
    ```java
    package chapter01;
    
    public class Try {
        public static void main(String[] args){
            double sum=1;
            System.out.println((int)sum);
            int s=1;
            System.out.println((byte)s);
        }
    }
    
    ```
- Java中,x1 op= x2形式的增强赋值表达式实现为x1 =(T)(x1 op x2),这里T是x1的类型。


    ```java
    package chapter01;
    
    public class Try {
        public static void main(String[] args){
            int sum = 0;
            sum += 4.5;
            System.out.println(sum);//答案是4
            sum = (int)(sum + 4.5);
            System.out.println(sum);//答案是8
        }
    }
    
    ```
  • 2.16 软件开发过程

    • 软件开发生命周期是一个多阶段的过程,包括需求规范、分析、设计、实现、测试、部署和维护。
  • 2.17 示例学习:整钱兑零

    package chapter01;
    
    import java.util.Scanner;
    
    public class ComputerChange {
        public static void main(String[] args){
            Scanner input = new Scanner(System.in);
            
            System.out.print("Enter an amount in double, for example 11.56: ");
            
            double amount = input.nextDouble();
            
            int remainAmount = (int)(amount * 100);
            
            int numberOfOneDollars = remainAmount / 100;
            remainAmount = remainAmount % 100;
            
            int numberOfOneQuarters = remainAmount / 25;
            remainAmount = remainAmount % 25;
            
            int numberOfDimes = remainAmount / 10;
            remainAmount = remainAmount % 10;
            
            int numberOfNickels = remainAmount / 5;
            remainAmount = remainAmount % 5;
            
            int numberOfPennies = remainAmount;
            
            System.out.println("Your amount " + amount + "consists of");
            System.out.println(" " + numberOfOneDollars + " dollars");
            System.out.println(" " + numberOfOneQuarters + "quarters");
            System.out.println(" " + numberOfDimes + "dimes");
            System.out.println(" " + numberOfNickels + "nickels");
            System.out.println(" " + numberOfPennies + "pennies");
        }
    }
    
    
  • 2.18 常见错误和陷进

    • 常见错误1:未声明、未初始化的变量和未使用的变量

    • 常见错误2:整数溢出

    • 常见错误3:舍入错误

    • 常见错误4:非预期的整数除法

    • 常见陷进:冗余的输入对象
      这是不好的代码:

      Scanner input = new Scanner(System.in);
              System.out.print("Enter an integer: ");
              int v1 = input.nextInt();
              
              Scanner input1 = new Scanner(System.in);
              System.out.print("Enter a double value: ");
              double v2 = input.nextDouble();
      

      重写代码之后应该是这样的:

      Scanner input = new Scanner(System.in);
              System.out.print("Enter an integer: ");
              int v1 = input.nextInt();
              System.out.print("Enter a double value: ");
              double v2 = input.nextDouble();
      
  • 编程小习题:

    • 1、
      在这里插入图片描述
    package chapter02;
    
    import java.util.Scanner;
    
    public class Code_01 {
        public static void main(String[] args){
            Scanner input = new Scanner(System.in);
            System.out.print("Enter a degree in Celsius: ");
            double temprature = input.nextDouble();
            double chinaTemprature = temprature * (9.0/5) + 32;
            System.out.format("%.1f Celsius is %.1f Fahrenheit",temprature,chinaTemprature);
        }
    }
    
    
    • 2、
      在这里插入图片描述
    package chapter02;
    
    import java.util.Scanner;
    
    public class Code_06 {
        public static void main(String[] args){
            Scanner input = new Scanner(System.in);
            System.out.print("Enter a number between 0 and 1000: ");
            int number = input.nextInt();
            int ge = number % 10;
            int more1 = number / 10;
            int shi = more1 % 10;
            int more2 = more1 / 10;
            int sum = more2 + ge + shi;
            System.out.format("The sum of digits is %d",sum);
        }
    }
    
    
    • 3、
      [图片上传失败...(image-8df476-1601875110821)]


      在这里插入图片描述
      package chapter02;
      
      import java.util.Scanner;
      
      public class Code_13 {
          public static void main(String[] args){
              Scanner input = new Scanner(System.in);
              System.out.print("Enter the monthly saving amount: ");
              double save = input.nextDouble();
              for(int i = 0;i < 5;i++){
                  save = (100 + save) * (1 + 0.00417);
              }
              System.out.format("After the sixth month, the account value is $%.2f",save);
          }
      }
      
      
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,635评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,543评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,083评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,640评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,640评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,262评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,833评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,736评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,280评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,369评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,503评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,870评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,340评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,460评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,909评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,512评论 2 359

推荐阅读更多精彩内容