Java(三)Java基本的程序结构

1、注意

      java 对大小写敏感

      main 方法必须声明为  public

2、注释

      单行://

      多行:/*  */

      文档注释: /**   */

3、数据类型

      java 是一种强类型语言,意味着必须为每个变量声明一种类型。java中共有 8 种基本类型。每种类型长度固定,与机器无关。

     注意:java 没有任何无符号类型

     (1)整型: long :8字节    int :4字节    short :2字节   byte :1字节

     (2)浮点型:  double :8字节      float :4字节

              float 类型有后缀 F,没有后缀时默认为 double 类型(加后缀 D 也一样)

     (3)char 类型

              char 类型用于表示单个字符。在 java 中,char 类型使用 UTF-16 编码描述一个代码单元,建议少用 char 类型。

     (4)boolean 类型: 类型只有两个值: false 和  true,用来判定逻辑条件,与整型值之间不能相互转换

             注意:c++ 中,数值或指针可以代替 boolean,整数0相当于 false,非0相当于 ture,java 中则不行。

4、变量

      变量名大小写敏感,长度没有限制

     (1)java中,不区分变量的声明与定义。

     (2)利用 final 声明常量,const 是 java 的保留关键字,目前还未使用。

5、运算符

     (1) c++ 中无法确定 >> 是算术移位还是逻辑移位,java 中消除了这种含糊性

               java 中 , >>> 运算符将用 0 填充高位, >>运算符用符号位填充高位,没有 <<< 运算符

     (2)数值类型之间的转换

           上图为数值类型之间的合法转换,实心箭头表示无信息丢失的转换,虚心箭头有可能有精度损失

     (3)强制类型转换

              语法格式是在圆括号中给出想要转换的目标类型。

              如果要对浮点数进行舍入运算,得到最接近的整数,可以使用 Math.round 方法:

double x = 9.992;
int nx = (int)Math.round(x);

// 变量 nx 的值为 10


      (4)运算符级别:java与c++ 不同,不使用逗号运算符,不过 for语句中可以使用逗号分隔表达式

6、字符串

      java 没有内置的字符串类型,在标准 java 类库中提供了一个预定义类 String。

     (1)子串

               String 类的 substring 方法可以从一个较大的字符串提取出一个子串(第二个参数时不想复制的第一个位置),如:

String aa = "Hello";

String s = aa.substring(0,3);

//s 为由字符 "Hel" 组成的字符串

     (2)拼接

              java 允许使用 + 号连接(拼接)两个字符串

String a = "Hello";
String b = "java";
String c = a + b; // c 为:Hellojava

int d = 8;
String e = "Hi" + d ;//字符串与非字符串拼接
//非字符串被转换成字符串, e 为 Hi8
System.out.pritln("The d is" + d);//常用于输出语句中
     

     (3)不可变字符串

              String类没有提供修改字符串的方法,可以先提取需要的字符,再拼接上替换的字符,如:

String aa = "Hello";

aa = aa.substring(0,3) + "P!";

// aa 为 Help!

     (4)检测字符串是否相等

              可以使用 equals 方法检测: s.equals(t) ,若 s与 t 相等,则返回 true ,否则返回 false。

              一定不能使用  ==  进行检测,它只能确定两个字符串是否放置在同一个位置上。(C++中的 string 类重载了 == 使其可以检测)

              想要比较两字符串是否相等,而不区分大小写,使用  s.equalsIgnoreCase(t)

7、输入输出

    (1)读取输入

             需要首先构造一个 Scanner 对象,并与"标准输入流" System.in 关联。

             然后使用 nextLine 输入一行,next 读取一个单词,nextInt 读取一个整数,nextDouble 读取一耳光浮点数

             并在程序开始添加 import java.util.*;  (Scanner 类定义在 java.util 包中,当类不是定义在基本 java.lang 包中时,都要将包加载进来)

             实例:

import java.util.*;
public class MyInput 
{
	public static void main(String[] args)
	{
		//构造 Canner对象  iput
		Scanner iput = new Scanner(System.in);
		
		System.out.print("What is your name? ");
		String name = iput.nextLine();
		
		System.out.print("How old are you? ");
		int age = iput.nextInt();
		
		System.out.println("Hello"+name+".Next year,"
				+ "you'll be"+(age+1));
	}
}

        (2)格式化输出

                 java 沿用了 C 语言库函数中的 printf 方法。

                 还可以使用静态的 String.format 方法创建一个格式化的字符串,而不打印输出。

8、控制流程

     (1)与C++不同,不能在嵌套的两个块中声明同名的变量。

     (2)java 控制流程结构与 c++ 一样,有很少的例外情况,没有 goto 语句,但break语句可以带标签,而且还添加二楼一种变形的 for 循环

9、大数值

      如果基本的整数和浮点数精度不够,可以使用 java,math 包中的: BigInterger 类实现任意精度的整数运算, BigDecimal 实现任意精度的浮点数运算。

10、数组

        使用 new 运算符创建数组:

int[] a = new int[100];
 

       (1)for each 循环

                java 新增的功能很强的循环结构,可以用来依次处理数组中的每个元素(其他类型的元素集合亦可)而不必为指定下标值而分心。

                格式:   for ( variable : collection )  statement

                例如:

for (int element:a)
     System.out.println(element);

//打印数组 a 的每一个元素

       (2)数组初始化以及匿名数组

              

int [] aa = {1,2,3,4,5};

//注意,这种语句不需要调用 new

//甚至还可以初始化一个匿名数组:
//new int[] {7,8,9,10,11}
//使用这种方法可以在不创建新变量的情况下重新初始化一个数组
aa = new int[] {7,8,9,10,11};


              在 java 中允许数组长度为0,可以创建一个长度为0的数组: new elementType[0]

        (3)数组拷贝

                允许将一个数组变量拷贝给另一个数组变量,这两个变量将引用同一个数组。

                如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用 Arrays 类的 copyOf 方法。

        (4)数组排序

                 可是使用 Arrays 类中的 sort 方法,这个方法使用了优化的快速排序算法。

          实例:

import java.util.*;
public class LotteryDrawing 
{
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		System.out.print("How many numbers do you need to draw? ");
		int k = in.nextInt();
		
		System.out.print("What is the highest number you can draw? ");
		int n = in.nextInt();
		
		int[] numbers = new int[n];
		for (int i=0;i<numbers.length;i++)
			numbers[i] = i + 1;
		
		int[] result = new int[k];
		for (int i=0;i<result.length;i++)
		{
			//获取0到n-1之间的一个随机数
			int r = (int)(Math.random()*n);
			result[i]=numbers[r];
			
			//为确保不会重复,用最后一个数值改写number[r],并将n减1
			numbers[r] = numbers[n-1];
			n--;			
		}
		Arrays.sort(result);
		System.out.println("Bet the following combination."
				+ "It'll make you rich!");
		for (int r : result) //for each 循环
			System.out.println(r);
	}
}

       (5)二维数组

               跟一维数组类似,使用之前需要用 new 进行初始化,若直接用数据进行初始化则不调用 new。

               要使用 for each 循环访问二维数组 a 的所有元素,需要使用两个嵌套的循环,如下:

for (double[] row : a)
    for(double value : row)
            {.....}


       (6)不规则数组

                实例:杨辉三角:

public class LotteryArray 
{
	public static void main(String[] args)
	{
		final int NMAX = 10; 
		int[][] odds = new int[NMAX+1][];//构造10行的二维数组
		for (int n=0;n<=NMAX;n++)
			odds[n] = new int[n+1]; //每行比上一行多一个元素
		
		for (int n=0;n<odds.length;n++)//对一维进行循环
			for(int k=0;k<odds[n].length;k++)//对二维进行循环
			{
				int lotteryOdds = 1;
				for (int i=1;i<=k;i++)
					lotteryOdds = lotteryOdds * (n-i+1)/i;
				odds[n][k] = lotteryOdds;
			}
		for (int[] row : odds)
		{
			for (int odd : row)
				System.out.printf("%4d", odd);
			System.out.println();
		}
		
	}
}





            

猜你喜欢

转载自blog.csdn.net/u012561696/article/details/19473129