黑马程序员技术交流社区

标题: Java自学笔记02—Java基础(下) [打印本页]

作者: 清香白莲    时间: 2015-4-1 15:58
标题: Java自学笔记02—Java基础(下)
控制流程条件语句if (condition)
statement1
else
statement2
可以没有else部分。
循环while (condition)
statement
  1. import java.util.*;

  2. public class HelloJava
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Scanner in = new Scanner(System.in);
  7.                
  8.                 System.out.print("How much money do you need to retire? ");
  9.                 double goal = in.nextDouble();
  10.                
  11.                 System.out.print("How much money will you contribute every year? ");
  12.                 double payment = in.nextDouble();
  13.                
  14.                 System.out.print("Interest rate in %: ");
  15.                 double interestRate = in.nextDouble();
  16.                
  17.                 double balance = 0;
  18.                 int years = 0;
  19.                
  20.                 while (balance < goal)
  21.                 {
  22.                         balance += payment;
  23.                         double interest = balance * interestRate / 100;
  24.                         balance += interest;
  25.                         years++;
  26.                 }
  27.                
  28.                 System.out.println("You can retire in " + years + " years.");
  29.         }
  30. }
复制代码
do
statement
while (condition);
  1. import java.util.*;

  2. public class HelloJava
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Scanner in = new Scanner(System.in);

  7.                 System.out.print("How much money will you contribute every year? ");
  8.                 double payment = in.nextDouble();

  9.                 System.out.print("Interest rate in %: ");
  10.                 double interestRate = in.nextDouble();

  11.                 double balance = 0;
  12.                 int year = 0;

  13.                 String input;

  14.                 do
  15.                 {
  16.                         balance += payment;
  17.                         double interest = balance * interestRate / 100;
  18.                         balance += interest;

  19.                         year++;

  20.                         System.out.printf("After year %d, your balance is %,.2f\n", year, balance);

  21.                         System.out.print("Ready to retire? (Y/N) ");
  22.                         input = in.next();
  23.                 } while (input.equals("N"));
  24.         }
  25. }
复制代码
for语句的第一部分通常用于对计数器初始化;
第二部分给出每次新一轮循环执行前要检测的循环条件;
第三部分指示如何更新计数器。

  1. import java.util.*;

  2. public class HelloJava
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Scanner in = new Scanner(System.in);
  7.                
  8.                 System.out.print("How many numbers do you need to draw? ");
  9.                 int k = in.nextInt();
  10.                
  11.                 System.out.print("What is the highest number you can draw? ");
  12.                 int n = in.nextInt();
  13.                
  14.                 int lotterOdds = 1;
  15.                 for (int i = 1; i <= k; i++)
  16.                         lotterOdds = lotterOdds * (n - i + 1) / i;
  17.                
  18.                 System.out.println("Your odds are 1 in " + lotterOdds + ". Good luck!");
  19.         }
  20. }
复制代码
多重选择switch语句将从与选项值相匹配的case标签处开始执行直到遇到break语句,或者执行到switch语句的结束处为止。

如果没有相匹配的case标签,而有default子句,就执行这个子句。
中断控制流程语句break语句用于跳出语句块。
continue语句将控制转移到循环首部。
大数值BigInteger类和BigDecimal类用于处理包含任意长度数字序列的数值。
使用valueOf方法将普通数值转换为大数值。使用add和multiply方法进行加法和乘法运算。

  1. import java.util.*;
  2. import java.math.*;

  3. public class HelloJava
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 Scanner in = new Scanner(System.in);
  8.                
  9.                 System.out.print("How many numbers do you need to draw? ");
  10.                 int k = in.nextInt();
  11.                
  12.                 System.out.print("What is the highest number you can draw? ");
  13.                 int n = in.nextInt();
  14.                
  15.                 BigInteger lotteryOdds = BigInteger.valueOf(1);
  16.                
  17.                 for (int i = 1; i <= k; i++)
  18.                         lotteryOdds = lotteryOdds.multiply(BigInteger.valueOf(n - i + 1).divide(BigInteger.valueOf(i)));
  19.                
  20.                 System.out.println("Your odds are 1 in " + lotteryOdds + ". Good luck!");
  21.         }
  22. }
复制代码
数组
数组一旦创建,就不能再改变大小。如果需要在运行时扩展数组,应该使用ArrayList。
for each循环用来处理元素集合中的每个元素,格式为:for (variable : collection) statement
声明并初始化数组可以有两种形式:int[] a = new int[] { 0, 1, 2 }或int[] a = { 0, 1, 2 }。
打印数组可以用toString方法,拷贝数组可以用copyOf方法。
对数值型数组进行排序,可以使用sort方法。

  1. import java.util.*;

  2. public class HelloJava
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Scanner in = new Scanner(System.in);
  7.                
  8.                 System.out.print("How many numbers do you need to draw? ");
  9.                 int k = in.nextInt();
  10.                
  11.                 System.out.print("What is the highest number you can draw? ");
  12.                 int n = in.nextInt();
  13.                
  14.                 int[] numbers = new int[n];
  15.                 for (int i = 0; i < numbers.length; i++)
  16.                         numbers[i] = i + 1;
  17.                
  18.                 int[] result = new int[k];
  19.                 for (int i = 0; i < result.length; i++)
  20.                 {
  21.                         int r = (int) (Math.random() * n);
  22.                        
  23.                         result[i] = numbers[r];
  24.                        
  25.                         numbers[r] = numbers[n - 1];
  26.                         n--;
  27.                 }
  28.                
  29.                 Arrays.sort(result);
  30.                 System.out.println("Bet the following combination. It'll make you rich!");
  31.                 for (int r : result)
  32.                         System.out.println(r);
  33.         }
  34. }
复制代码
可以把二维数组看成矩阵,以行列的角度索引二维数组中的元素。
  1. public class HelloJava
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 final double STARTRATE = 10;
  6.                 final int NRATES = 6;
  7.                 final int NYEARS = 10;
  8.                
  9.                 double[] interestRate = new double[NRATES];
  10.                 for (int j = 0; j < interestRate.length; j++)
  11.                         interestRate[j] = (STARTRATE + j) / 100.0;
  12.                
  13.                 double[][] balances = new double[NYEARS][NRATES];
  14.                
  15.                 for (int j = 0; j < balances[0].length; j++)
  16.                         balances[0][j] = 10000;
  17.                
  18.                 for (int i = 1; i < balances.length; i++)
  19.                 {
  20.                         for (int j = 0; j < balances[i].length; j++)
  21.                         {
  22.                                 double oldBalance = balances[i - 1][j];
  23.                                
  24.                                 double interest = oldBalance * interestRate[j];
  25.                                
  26.                                 balances[i][j] = oldBalance + interest;
  27.                         }
  28.                 }
  29.                
  30.                 for (int j = 0; j < interestRate.length; j++)
  31.                         System.out.printf("%9.0f%%", 100 * interestRate[j]);
  32.                
  33.                 System.out.println();
  34.                
  35.                 for (double[] row : balances)
  36.                 {
  37.                         for (double b : row)
  38.                                 System.out.printf("%10.2f", b);
  39.                        
  40.                         System.out.println();
  41.                 }
  42.         }
  43. }
复制代码
二维数组每一行的长度可以不同。
  1. public class HelloJava
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 final int NMAX = 10;
  6.                
  7.                 int[][] odds = new int[NMAX + 1][];
  8.                 for (int n = 0; n <= NMAX; n++)
  9.                         odds[n] = new int[n + 1];
  10.                
  11.                 for (int n = 0; n < odds.length; n++)
  12.                         for (int k = 0; k < odds[n].length; k++)
  13.                         {
  14.                                 int lotteryOdds = 1;
  15.                                 for (int i = 1; i <= k; i++)
  16.                                         lotteryOdds = lotteryOdds * (n - i + 1) / i;
  17.                                
  18.                                 odds[n][k] = lotteryOdds;
  19.                         }
  20.                
  21.                 for (int[] row : odds)
  22.                 {
  23.                         for (int odd : row)
  24.                                 System.out.printf("%4d", odd);
  25.                         System.out.println();
  26.                 }
  27.         }
  28. }
复制代码




作者: 清香白莲    时间: 2015-4-1 15:59
刚才论坛是不是崩溃了?
作者: wkz_crystal    时间: 2015-4-1 16:02
总结得很好,谢谢分享!!如果代码中能写点必要的注释就更加完美了……
作者: showdy    时间: 2015-4-1 21:18
很认真啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2