zoukankan      html  css  js  c++  java
  • Java程序设计练习2——Java基础应用

    第二章 Java基础应用                                                     

    2.1基本语法                          

    实例019  输出错误信息和调试信息

      利用两个System类成员变量输出,两个类成员变量是out和err,都是static,out主要用于输出调试信息,err用于输出错误信息,一般用红色显示(在eclipse控制台是这样)。out和err都是实例对象成员。注:实例变量也是变量,首字母小写

      

    1 package chapter2;
    2 
    3 public class Demo019 {
    4     public static void main(String[] args){
    5         System.out.println("输出错误信息");
    6         System.err.println("输出错误信息");
    7 
    8     }
    9 }

    输出结果:   

        输出错误信息
        输出错误信息

    备注:err可以输出错误信息,但也不仅仅只是输出错误信息,输出信息是一个基本功能,只是颜色弄成红色以示提醒,本质是输出信息,加上红色表示提醒,这些信息可以是错误的,也可以是特别需要提醒用户的。

    实例020 从控制台输入字符

      类似输出,输入使用in这个实例变量,也是System类的。它是一个输入流类变量,可以接收用户输入的信息,是标准的输入流实例对象。输入流就像一个管子一样,将从一个输入口接收到的东西"搭"到另一个目的地方,将信息流输入进去。System类的in就是这样的一个管子。可以从用户那里接收信息。

      另外使用Scanner来扫描用户输入的信息。

    代码如下:

      

     1 package chapter2;
     2 
     3 import java.util.Scanner;
     4 
     5 public class Demo020 {
     6     public static void main(String[] args){
     7         //搭建一个输入流扫描器
     8         Scanner scanner = new Scanner(System.in);
     9         //提示请输入你的名字
    10         System.out.println("请输入你的名字:");
    11         //将扫描的内容输入到一个字符串中
    12         String line = scanner.nextLine();
    13         //输出名字
    14         System.out.println("你的名字是:" + line);
    15     }
    16 }
    17 输出结果:
    18             请输入你的名字:
    19             王家玮
    20             你的名字是:王家玮        

    实例021 暂时不懂

    实例022 自动类型和强制类型转换

      注意:+两边的操作数类型不同,操作值结果也是不同的。同属于基本类型的,运算后,结果是自动转换后,如果一个是字符串一个是数值,操作结果是字符串。

     1 package chapter2;
     2 
     3 public class Demo022 {
     4     public static void main(String[] args){
     5         //创建各种基本类型的变量
     6         byte   b = 127;
     7         char   c = 'a';
     8         short  s = 97;
     9         int    i = 212;
    10         long   l = 23242L;
    11         float  f = 3.4F;
    12         double d = 23.4;
    13         //自动转换输出
    14         System.out.println("byte + char = " + (b + c));//b和c先转换成int再计算的
    15         System.out.println("byte + char + short = " + (b + c + s));//同上
    16         System.out.println("byte + char + short + int = " + (b + c + s + i));
    17         System.out.println("byte + char + short + int + long = " + (b + c + s + i + l));
    18         System.out.println("byte + char + short + int + long + float = " 
    19                             + (b + c + s + i + l + f));
    20         System.out.println("byte + char + short + int + long + float + double = " 
    21                 + (b + c + s + i + l + f + d));
    22         //强制转换
    23         System.out.println("double转换成int = " + (int)d);
    24         System.out.println("long转换成int = " + (int)l);
    25         System.out.println("short转换成char = " + (char)s);
    26         System.out.println("char转换成int = " + (int)c);
    27     }
    28 }

    实例023 利用位运算进行加密
      可以利用异或运算符^对字符串的每一个字符进行异或运算,这样就可以得到一个新的字符串,这个被处理过的字符串其实就是经过加密的。

     1 package chapter2;
     2 
     3 import java.util.*;
     4 
     5 public class Demo023 {
     6     public static void main(String[] args){
     7         //创建扫描器,扫描输入的密码
     8         Scanner scanner = new Scanner(System.in);
     9         System.out.println("请输入你的密码:");
    10         String str = scanner.nextLine();
    11         //将输入的字符串转换成数组进行处理
    12         char[] array = str.toCharArray();
    13         for(int i = 0;i < array.length;i++){
    14             array[i] = (char) ((array[i])^100000);
    15         }
    16         //输出转换后的结果
    17         System.out.println("加密后的结果是:");
    18         for (char i:array){
    19             System.out.print(i);
    20         }
    21         //另一种输出方式
    22         System.out.println("\n" + new String(array));
    23     }
    24 }

    输出结果:    

    请输入你的密码:
    123456
    加密后的结果是:
    蚑蚒蚓蚔蚕蚖
    蚑蚒蚓蚔蚕蚖

     总结:

       灵活运用位运算可以实现很多高级、高效的算法。例如,一个数字的位移运算,每左移n位就等于这个数乘以2的n次方,每右移n位就等于这个数除以2的n次方,而且这个算法非常快。

    实例024 用三元运算符判断技术和偶数

      三元运算符是if...else条件语句的简写格式,可以完成简单的条件判断。本实例利用三元运算符实现奇偶数的判断,程序要求用户输入一个整数,然后判断是奇数还是偶数并输出判断结果。代码如下:

     1 package chapter2;
     2 /**本实例利用三元运算符实现奇偶数的判断,程序要求用户输入一个整数,
     3  * 然后判断是奇数还是偶数并输出判断结果。
     4  */
     5 import java.util.*;
     6 
     7 public class Demo024 {
     8     public static void main(String[] args){
     9         Scanner scanner = new Scanner(System.in);
    10         System.out.println("请你输入一个整数呢:");
    11         long number = scanner.nextLong();
    12         String result = ((number%2)==0) ? "这个数是偶数!" : "这个数是奇数!";
    13         System.out.println(result);
    14         
    15     }
    16 }

    总结:

      三元运算符的使用语法是 (表达式判断逻辑值) ?(结果1) :(结果2) 具体的含义是:如果表达式判断的逻辑值是真,就输出结果1,如果是假就输出结果2

    025 更精确的使用浮点数

      使用BigDecimal进行大数运算

      BigDecimal可以进行高精度的数值运算,有四个常用的四则运算方法,add,subtract,multiply,divide

    package chapter2;
    
    import java.math.BigDecimal;
    
    public class Demo025 {
        public static void main(String[] args){
            //非精确计算
            double price = 3.3;
            double money = 5;
            double result = money - price;
            //输出剩余的钱
            System.out.println("double精度剩余的钱:" + result);
            BigDecimal price1 = new BigDecimal(3.3);
            BigDecimal money1 = new BigDecimal(5);
            BigDecimal result1 = money1.subtract(price1);
            //输出精确计算下的钱
            System.out.println("BigDecimal精度剩余的钱:" + result1);
            
            
            
        }
    }
    输出结果
    double精度剩余的钱:1.7000000000000002
    BigDecimal精度剩余的钱:1.70000000000000017763568394002504646778106689453125

    实例026 利用移位运算符进行乘法运算
      程序开发中乘法运算通常是*或BigDecimal类的multiply()方法,本例用的是移位运算符实现特殊的乘法运算,这种运算方式速度效率非常之高,在大数运算的时候特别有用。
    原理:一个整数A执行向左移位运算n位,效果等同于这个整数A乘以2的n次方,注意不是这个整数的n次方。

      

    package chapter2;
    
    import java.util.*;
    
    //利用移位运算符实现整数乘法运算
    public class Demo026 {
        public static void main(String[] args){
            System.out.println("请输入一个整数:");
            Scanner scanner = new Scanner(System.in);
            long lg = scanner.nextLong();
            System.out.println("您输入的数是:" + lg);
            //移位运算不能单独作为一个语句
            //2<<2;
            System.out.println("该数字乘以2的结果是:" + (lg<<1));
            System.out.println("该数字乘以4的结果是:" + (lg<<2));
            System.out.println("该数字乘以8的结果是:" + (lg<<3));
            System.out.println("该数字乘以16的结果是:" + (lg<<4));
            System.out.println("该数字乘以32的结果是:" + (lg<<5));
            System.out.println("该数字乘以64的结果是:" + (lg<<6));
            
        }
    }
    输出结果:
    请输入一个整数:
    99
    您输入的数是:99
    该数字乘以2的结果是:198
    该数字乘以4的结果是:396
    该数字乘以8的结果是:792
    该数字乘以16的结果是:1584
    该数字乘以32的结果是:3168
    该数字乘以64的结果是:6336

    实例27 不借用第三个变量实现两个数字的交换
      实现原理:利用按位运算的异或运算符^实现两个变量的互换。按位异或运算符进行位运算规则是:两个位,相同的结果取0,不同的结果取1.另外需要注意的是按位运算符运算结果必须赋值给一个结果,单纯的运算作为一个语句如A^B是非法的,会报错

       

    package chapter2;
    
    import java.util.Scanner;
    
    public class Demo027 {
        public static void main(String[] args){
            System.out.println("请输入第一个整数:");
            Scanner scannera = new Scanner(System.in);
            long a = scannera.nextLong();
            System.out.println("您输入的数是:" + a);
            System.out.println("请输入第二个整数:");
            Scanner scannerb = new Scanner(System.in);
            long b = scannerb.nextLong();
            System.out.println("您输入的数是:" + b);
            System.out.println("交换前的a和b:" + "a = " + a + " b = " + b);
            a = a^b;
            b = b^a;
            a = a^b;
            System.out.println("交换后的a和b:" + "a = " + a + " b = " + b);
        }
    }

    输出结果是:
    请输入第一个整数:
    2
    您输入的数是:2
    请输入第二个整数:
    9
    您输入的数是:9
    交换前的a和b:a = 2 b = 9
    交换后的a和b:a = 9 b = 2

     

    2.3 条件语句                         

    实例028 判断某一年是否为闰年

    原理:判断是否是闰年的关键是公式。满足两种条件的整数:1.能够被400整除的整数。2.能够被4整除但不能被100整除的整数

    package chapter2;
    
    import java.util.Scanner;
    
    public class Demo028 {
        public static void main(String[] args){
            System.out.println("请输入一个年份:");
            Scanner scanner = new Scanner(System.in);
            long lg = scanner.nextLong();
        
            if(((lg%4 ==0)&&((lg%100) != 0))||(lg%400 == 0)){
                System.out.println("您输入的年份" + lg + "是闰年");
            }else{
                System.out.println("您输入的年份" + lg + "不是闰年");
            }
        }
    }
    输出结果:
    请输入一个年份:
    2100
    您输入的年份2100不是闰年

    注意:三元运算符(? :)是if...else...语句的简洁写法,可以根据需要来决定使用哪一种,前者常用于赋值判断,后者常用于业务流程

     实例029 验证登陆信息的合法性

    package chapter2;
    
    import java.util.Scanner;
    
    public class Demo029 {
        public static void main(String[] args){
            System.out.println("请输入您的姓名:");
            Scanner scannerName = new Scanner(System.in);
            String name = scannerName.nextLine();
            System.out.println("请输入您的密码:" );
            Scanner scannerPasswd = new Scanner(System.in);
            String password = scannerPasswd.nextLine();
            loginCheck(name,password);
        }
        public static void loginCheck(String name,String password){
            if(name.equals("ren") && password.equals("123456")){
                System.out.println("登录成功!");
            }else{
                System.out.println("登录失败!");
            }
        }
    }

    相关说明:字符串属于基本对象而非基本数据类型,不能使用==来判断两个字符串是否相等,所以它需要通过equals()方法来判断两个字符串内容是否相同,如果使用==判断的将是两个字符串对象的地址,而非字符串内容。

    实例030 为新员工分配部门

    原理:这里使用switch语句,并利用hashCode来区分不同情况

    import java.util.Scanner;
    public class Example {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入新员工的姓名:");
            String name = scan.nextLine();// 接收员工名称
            System.out.println("请输入新员工应聘的编程语言:");
            String language = scan.nextLine();// 接收员工应聘的编程语言
            // 根据编程语言确定员工分配的部门
            switch (language.hashCode()) {
                case 3254818:// java的哈希码
                case 2301506:// Java的哈希码
                case 2269730:// JAVA的哈希码
                    System.out.println("员工"+name+"被分配到Java程序开发部门。");
                    break;
                case 3104:// c#的哈希码 
                case 2112:// C#的哈希码 
                    System.out.println("员工"+name+"被分配到C#项目维护组。");
                    break;
                case -709190099: // asp.net的哈希码 
                case 955463181:  // Asp.net的哈希码 
                case 9745901:    // ASP.NET的哈希码 
                    System.out.println("员工"+name+"被分配到Asp.net程序测试部门。");
                    break;
                default:
                    System.out.println("本公司不需要" + language + "语言的程序开发人员。");
            }
        }
    }
    输出结果:

    请输入新员工的姓名:
    Jack
    请输入新员工应聘的编程语言:
    java
    员工Jack被分配到Java程序开发部门。

     

     实例031::用Switch语句根据消费金额计算折扣

    package chapter2;
    
    import java.util.Scanner;
    
    public class ProductPrice {
        public static void main(String[] args) {
            //确定输入金额
            Scanner s = new Scanner(System.in);
            System.out.println("请输入金额:");
            float money = s.nextFloat();
            //确定该打几折
            float rebate = 0f;
            //200元以上才能打折
            if(money > 200){
                //定义打折等级
                int grade = (int)money/200;
                switch(grade){
                    case 1:{
                        rebate = 0.95f;
                        break;
                    }
                    case 2:{
                        rebate = 0.9f;
                        break;
                    }
                    case 3:{
                        rebate = 0.85f;
                        break;
                    }
                    case 4:{
                        rebate = 0.8f;
                        break;
                    }
                    case 5:{
                        rebate = 0.75f;
                        break;
                    }
                    case 6:{
                        rebate = 0.7f;
                        break;
                    }
                    case 7:{
                        rebate = 0.65f;
                        break;
                    }
                    case 8:{
                        rebate = 0.6f;
                        break;
                    }
                    case 9:{
                        rebate = 0.55f;
                        break;
                    }
                    default:{
                        rebate = 0.5f;
                        break;
                    }
                };
                System.out.println("您的累积消费金额是:" + money);
                System.out.println("您获得的优惠折扣是:" + rebate);
            }else{
                System.out.println("您没有折扣优惠");
            }
        }
    }
    View Code

    注意:switch后面没有冒号,case后面有冒号,case的子句在switch后面。
    实例032:判断用户输入月份的季节

    package chapter2;
    
    import java.util.*;
    
    public class JudgeMonth {
        public static void main(String[] args) {
            //让用户输入月份
            System.out.println("请输入月份:");
            Scanner s = new Scanner(System.in);
            Short month = s.nextShort();
    
            //判断月份属于哪个季度
            switch(month){
                case 12:
                case 1:
                case 2:{
                    System.out.println("您输入的月份属于冬季!");
                    break;
                }
                case 3:
                case 4:
                case 5:{
                    System.out.println("您输入的月份属于春季!");
                    break;
                }
                case 6:
                case 7:
                case 8:{
                    System.out.println("您输入的月份属于夏季!");
                    break;
                }
                case 9:
                case 10:
                case 11:{
                    System.out.println("您输入的月份属于秋季!");
                    break;
                }
                default:{
                    System.out.println("您输入的月份不存在!");
                    break;
                }
            }
        }
    }
    View Code

    上面的switch融合了多个条件,case的不同的情况也可以做相同的处理。

    实例33:使用while和自增运算符进行遍历

    package chapter2;
    
    public class Demo0111 {
        public static void main(String[] args) {
            //创建包含几种语言的数组
            String[] language = new String[]{"Chinese", "English",
                                             "Deutsch", "Castellano"};
            int index = 0;
            while(index < language.length){
                System.out.println(language[index++]);
            }
        }
    }
    输出结果:
    Chinese
    English
    Deutsch
    Castellano
    View Code
  • 相关阅读:
    关键字搜索.sql
    加载SOS调试器扩展
    数字转换成十六进制.sql
    复制指定节点及其所有子节点到指定结点的处理示例(借鉴方式排序法).sql
    字符串并集&交集处理示例.sql
    使用UNION实现库存报表的示例.sql
    Shell脚本学习笔记[1]
    bash中cut命令的用法[转]
    xargs的用法[转]
    正则语言学习笔记
  • 原文地址:https://www.cnblogs.com/people/p/3081474.html
Copyright © 2011-2022 走看看