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
原文地址:https://www.cnblogs.com/people/p/3081474.html