(三)Java的基本程序设计

1.  Java应用程序中的内容都必须放置在类中。命名为驼峰命名方法

 

2.  源代码的文件名必须与公共类的名字相同。

 

3.  4种整型:byte  short  int  long  

    *(Java没有任何无符号类型)

类型

存储需求 最小值 最大值
byte 1 字节 -128 127
short 2   字节 -32768 32767
int 4 字节 -2  147  483  648 2  147  483  647
long 8 字节 -9  223 372  036  854  775  808 9  223  3712  036  854  775  807

  

   2种浮点类型:float  double  

    *(float类型的数值有一个后缀F,没有后缀F的浮点数值默认为double类型,当然也可以在浮点数值后边添加后缀D),

    * (一个正整数除以0的结果为无穷大,计算0/0或者负数的平方根结果为NaN)

类型 存储需求 最小值 最大值 有效位数
float 4 字节 -3.402  823 47E + 38  3.402  823 47E + 38 6-7位
double 8 字节 -1.791  693 134  862  315  70E + 308 1.791  693 134  862  315  70E + 308 15位

  

    char类型

类型 存储需求 最小值 最大值
char 2 字节 \u0000 \uffff

    

    boolean类型  

        *(false 或 true)

        *(在Java中,if(x=0)这个表达式是不能通过编译的,其原因是整数表达式x=0不能转换为布尔值)

 

4.  关键字final表示变量只能被赋值一次,一旦赋值就不能再更改了习惯上常量名使用全大写

 

5.  对于使用strictfp关键字标记的方法必须使用严格的浮点计算来产生理想的结果,如果将一个类标记为strictfp,这个类中所有的方法必须都要使用严格的浮点计算

 

6.  >>>运算符用0填充高位,>>运算符用符号位填充高位,没有<<<运算符,对于移位运算符右侧的参数需要进行mo532de运算(除非左边的操作数是long类型,在这种情况下需要对右侧操作数模64),例如1<<35 和 1<<3 或8是相同的

 

7. 

  

 如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型

 否则,如果其中一个数是float类型,另一个操作数就会转换为float类型

 否则,如果其中一个操作数是long类型,另一个操作数会转换为long类型

 否则,两个操作数都将被转换为int类型

 

8. 关于强制类型转换有可能会损失精度,如果将一个数值从一种类型强制转换为另一种类型,而又超出了目标类型的表示范围,结果就会截断一个完全不同的值例如(byte)300的实际值为44.

 

9. 枚举类型包括有限个命名的值enum Size{SMALLL,MEDIUM,LARGE,EXRTA_LARGE};

 

10. 字符串相等使用equals,不区分大小写可以使用equalsIgnoreCase方法。

 

11. 判断一个字符串既不是null也不为空串,if(str != null && str.length() != 0)

 

12. 如果想遍历一个字符串,并且依次查看每一个代码点,可以使用下列语句:

    int count  = sentence.codePointCount(0,sentense.length());//获取字符串长度

    int cp = sentence.codePointAt(i);

    if(Character.isSupplementaryCodePoint(cp)) i+=2;    //由于一个字符可能需要2个代码单元,因此需要判断一下,进行循环累加

    else i++;

 

13. 使用+拼接字符串时,每次连接字符串都会创建一个新的String 对象,既耗时又浪费空间,此时使用StringBuilder类就可以避免这个问题的发生。

    StringBuilder sb = new StringBuilder();

    sb.append(str1);

    sb.append(str2);

    return sb.toString();

 

14. 从控制台获取输入:Console对象处理输入不如采用Scanner方便,每次只能读取一行输入,而没有能够读取一个单词或者一个数值的方法,但是对于密码等不适用于显示在控制台上的可以使用Sonsole对象,保存密码数组处理之安全起见需要用其他值填充覆盖

    Scanner sc = new Scanner(System.in);

    System.out,println("What is your name?");

    String name = sc.nextLine();//读取一行

    String firstName = sc.next();//读取一个单词,以空格作为分隔符,值得注意的是不论中间有多少个空格,都是区分两个单词的分隔符,比如Zhang san和Zhang       san都可以使用两次next方法读取两个单词效果是一样的,如果没有三个单词而使用三次next,那么前两次也没有输出,输出的全是换行符

    int age = sc.nextInt();

    float weight = sc.nextDouble();

    Console cons = System.console();

    String userName = cons.readLine("User name:");

    char[] passwd = cons.readPassword("Password:");

 

import java.util.*;//Scanner
import java.io.*;//Console
public class ScannerApp{
public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); System.out.println("请输入姓名:");
String name
= sc.nextLine(); System.out.println("name---"+name); System.out.println("请输入年龄:"); int age = sc.nextInt(); System.out.println("age---"+age); System.out.println("请再次输入姓名:"); String firstName = sc.next(); System.out.println("您的姓氏---"+firstName); Console cons = System.console(); String userName = cons.readLine("User name:"); char[] psd = cons.readPassword("Password:"); } }

    

 

14. 使用静态的String.format方法创建一个格式化的字符串

    String message= String.format("Hello, %s. Next year, you will be %d", name, age);  

    System.out.println(message); 

 

15. for(double x = 0; x != 10;x+=0.1);由于舍入的误差,永远不会结束,可以在各自独立的不同的for循环体中定义同名的变量

 

16. 关于switch case 语句,从JavaSE 7 开始,case标签支持字符串判断,对于枚举类型不必在每个标签中指明枚举类型,可以由switch的表达式确定,例如

enum Signal {
        GREEN, YELLOW, RED
    }

    public class TrafficLight {
        Signal color = Signal.RED;

        public void change() {
            switch (color) {
            case RED:
                color = Signal.GREEN;
                break;
            case YELLOW:
                color = Signal.RED;
                break;
            case GREEN:
                color = Signal.YELLOW;
                break;
            }
        }
    }

 

17. break只能中断最近的一层循环,要想跳出最大的循环,可以在最大的循环之前加标签:          here:while{...}

       然后再程序中使用break here;

 

18. continue语句与break语句一样,他将中断正常的控制流程返回当前循环体继续下一次执行,continue之后的代码将不再执行。

 

19. 如果基本的整数和浮点精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:Biginteger 和 BigDecimal,这两个类可以处理包含任意长度数字序列的数值,分别实现了任意精度的整数运算和任意精度的浮点数运算。

 

20. 与C++不同Java没有提供运算符重载功能,程序员无法重定义+和*运算符,使其应用于BigInteger类的add和multiply运算。Java语言的设计者确实为字符串的链接重载了+运算符,但没有重载其他运算符,也没有给Java程序员在自己的类中重载运算符的机会。

 

21. 推荐使用 int[]  a = new int[100];

    数组长度不能是变量。创建一个数字数组时所有元素初始化为0,boolean数组元素初始化为false,对象数组元素初始化为null。数组一经创建就不能改变其大小,越界使用会抛出array index out of bounds的异常。

 

22. for each循环体,可以用来依次处理数组中的每个元素而不必为指定下标值而分心。

    for(variable:collection) statement;

    for(int element:a);//a 是数组

  collection这一集合表达式必须是一个数组或者是一个实现了Iterale接口的类对象(例如ArrayList)

 

23. 尽管foreach做的很好,但是在很多场合下,还是需要使用传统的for循环,例如不希望便利集合中的每个元素,或者在循环内部需要使用下标值,其实配合计数器还有break以及continue语句也可以实现这一功能。另外可以使用Arrays.toString(array);来打印数组"[0,0,0,0,0...]"

 

24.在java中允许数组长度为0,在编写一个结果为数组的方法时,如果碰巧结果为空,则这种语法形式就显得非常有用

 

25. 数组拷贝:

    int[]  copiedArray = Arrays.copyOf(originArray, originArray.length);//完全拷贝

    int[]  copiedArray = Arrays.copyOf(originArray, 2*originArray.length);//增加数组长度,前面的元素完全拷贝,后面的元素初始化为0

    int[]  copiedArray = Arrays.copyOf(originArray, originArray.length / 2);//长度不够,则部分拷贝

 

26. public static void main(String[] args)命令行参数存以空格作为分隔符。保存在数组String[] args中

 

27. 数组排序Arrays.sort(array);//使用了优化的快速排序算法,快速排序算法对于大多数数据集合来说都是效率比较高的

 

28. 彩票抽取

import java.util.*;

public class LotteryDrawing{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一共有多少张彩票:");
		int total = sc.nextInt();
		System.out.println("请输入需要抽取多少张:");
		int need = sc.nextInt();
		System.out.println("一共有 "+total+"张彩票,"+"需要抽取 "+need+"张");
		System.out.println("正在初始化彩票数组...");
		int[] lottery = new int[total];
		for(int i  = 0;i < total; i++){
			lottery[i] = i + 1;
		}
		System.out.println("彩票数组初始化完毕");
		System.out.println("开始抽取彩票...");
		int[] result = new int[need]; 
		for(int i = 0; i < need; i++){
			int r = (int)(Math.random() * total);
			result[i] = lottery[r];
			lottery[r] = lottery[total-1];
			total --;
		}
		System.out.println("抽取彩票完毕");
		System.out.println("抽取结果为:");
		Arrays.sort(result);
		for(int element:result){
			System.out.println(element);
		}
	}

}

  

 

 29. 打印杨辉三角:使用二维数组,

      A.输入要生成的行数

      B.每行的第一个数是1,对角线上的数是1

      C.从第三行开始,从第二列开始,每个位置的数值是上一行的两个数的和

      D.打印时,打印到对角线时停止,打印完一行时换行。

import java.util.*;

public class YangHui{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要生成多少行:");
        int row = sc.nextInt();
        System.out.println("开始生成");
        int[][] array = new int[row][row];
        for(int i = 0; i < row; i++){
            array[i][0] = 1;
            array[i][i] = 1;
            if(i >= 2){
                for(int j = 1; j < i; j++){
                    array[i][j] = array[i-1][j] + array[i-1][j-1];
                }
            }
        }
for(int i = 0; i < row; i++){ for(int j = 0; j <= i ;j++){ System.out.print(array[i][j]); System.out.print(" "); } System.out.println(); } } }

 

 

posted @ 2016-03-18 09:33  桃源仙居  阅读(158)  评论(0)    收藏  举报