java隐式类型转换
package com.Shayne;
public class Main {
public static void main(String[] args) {
// Implicit casting
// byte -> short > int > long > float > double
double x = 1.1;
double y = x + 2; // 2 -> 2.0
System.out.println(y);
}
}
java强制类型转换
package com.Shayne;
public class Main {
public static void main(String[] args) {
// Explicit casting
// byte > short > int > long > float > double
double x = 1.1;
int y = (int) x + 2; // 1.1 -> 1
System.out.println(y);
}
}
字符串类型->整形
package com.Shayne;
public class Main {
public static void main(String[] args) {
// Implicit casting
// byte > short > int > long > float > double
String x = "1";
int y = Integer.parseInt(x) + 2; // "1" -> 1
System.out.println(y);
}
}
字符串类型->double
package com.Shayne;
public class Main {
public static void main(String[] args) {
// Implicit casting
// byte > short > int > long > float > double
String x = "1.1";
Double y = Double.parseDouble(x) + 2; // "1" -> 1
System.out.println(y);
}
}
Math包的一个例子
package com.Shayne;
public class Main {
public static void main(String[] args) {
int result = (int) Math.round(Math.random() * 100); // double型不能自动转换成int型
System.out.println(result);
}
}
数字格式化
//'NumberFormat' is abstract; cannot be instantiated
//Returns:the NumberFormat instance for currency formatting
//NumberFormat.getCurrencyInstance()是一个factory method, 返回一个新的实例
package com.Shayne;
import java.text.NumberFormat;
public class Main {
public static void main(String[] args) {
NumberFormat currency = NumberFormat.getCurrencyInstance();
String result = currency.format(1234567.891);
System.out.println(result);
}
}
//out: ¥1,234,567.89
另一个例子
package com.Shayne;
import java.text.NumberFormat;
public class Main {
public static void main(String[] args) {
String result = NumberFormat.getPercentInstance().format(0.1);
// method chaining
System.out.println(result);
}
}
Reading Input
获取终端数字输入
package com.Shayne;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// a field is like a variable in a class.
System.out.print("Age: ");
byte age = scanner.nextByte();
System.out.println("you are " + age);
}
}
获取终端字符串输入
package com.Shayne;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Name: ");
// String name = scanner.next().trim();
// scanner.next()只会获取终端输入的第一个token并返回,而scanner.nextLine()会获取终端输入的整行字符串,即所有token.
// 其中的trim只是一个去掉字符串两端多余空格的方法.
String name = scanner.nextLine().trim();
System.out.println("you are " + name);
}
}
Project (Mortgage Calculator)
package com.Shayne;
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Scanner;
public class Main {
//Mortgage Caculator
public static void main(String[] args) {
final byte MONTHS_IN_YEAR = 12;
final byte PERCENT = 100;
Scanner scanner = new Scanner(System.in);
System.out.print("Principal: ");
int principal = scanner.nextInt();
System.out.print("Annual Interest Rate: ");
float annualInterest = scanner.nextFloat();
float monthlyInterest = annualInterest / PERCENT / MONTHS_IN_YEAR;
System.out.print("Period (Years): ");
byte years = scanner.nextByte();
int numberOfPayments = years * MONTHS_IN_YEAR;
NumberFormat mortgageFormatted = NumberFormat.getCurrencyInstance(Locale.US);
double mortgage = (principal * monthlyInterest * Math.pow(1 + monthlyInterest, numberOfPayments)) / (Math.pow(1 + monthlyInterest, numberOfPayments) - 1);
String result = mortgageFormatted.format(mortgage);
System.out.print("Mortgage: ");
System.out.println(result);
}
}
//Principal: 100000
//Annual Interest Rate: 3.92
//Period (Years): 30
//Mortgage: $472.81
Comparison operators
logical operators
package com.Shayne;
public class Main {
public static void main(String[] args) {
int temperature = 22;
boolean isWarm = temperature > 20 && temperature < 30;
System.out.println(isWarm);
}
}
package com.Shayne;
public class Main {
public static void main(String[] args) {
boolean hasHighIncome = false;
boolean hasGoodCredit = true;
boolean isEligible = hasHighIncome || hasGoodCredit;
System.out.println(isEligible);
}
}
package com.Shayne;
public class Main {
public static void main(String[] args) {
boolean hasHighIncome = false;
boolean hasGoodCredit = true;
boolean hasCriminalRecord = false;
boolean isEligible = (hasHighIncome || hasGoodCredit) && !hasCriminalRecord;
System.out.println(isEligible);
}
}
IF 语句
package com.Shayne;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.print("temperature: ");
Scanner scanner = new Scanner(System.in);
int temp = scanner.nextInt();
if (temp > 30){
System.out.println("It's a hot day");
System.out.println("Drink plenty of water");
}
else if (temp >20)
System.out.println("It's a nice day");
else
System.out.println("It's cold");
}
}
Simplified If statement
1.
package com.Shayne;
public class Main {
public static void main(String[] args) {
int income = 120_000;
boolean hasHighIncome;
if (income > 100_000)
hasHighIncome = true;
else
hasHighIncome = false;
}
}
2.
package com.Shayne;
public class Main {
public static void main(String[] args) {
int income = 120_000;
boolean hasHighIncome = false;
if (income > 100_000)
hasHighIncome = true;
}
}
3.
package com.Shayne;
public class Main {
public static void main(String[] args) {
int income = 120_000;
boolean hasHighIncome = (income > 100_000);
}
}
// 第三种方式最好
IF 小训练
package com.Shayne;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.print("Number: ");
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
// 将条件最苛刻的放在最上面
if (number % 5 == 0 && number % 3 == 0)
System.out.println("FizzBuzz");
else if (number % 5 == 0)
System.out.println("Fizz");
else if (number % 3 == 0)
System.out.println("Buzz");
else
System.out.println(number);
}
}
三元运算符
package com.Shayne;
public class Main {
public static void main(String[] args) {
int income = 120_000;
String className = income > 100_000 ? "First" : "Economy";
System.out.println(className);
}
}
Switch 语句
package com.Shayne;
public class Main {
public static void main(String[] args) {
String role = "admin";
switch (role) {
case "admin":
System.out.println("You're an admin");
break;
case "moderate":
System.out.println("Yoy're an moderator");
break;
default:
System.out.println("You're a guest");
}
}
}
package com.Shayne;
public class Main {
public static void main(String[] args) {
int role = 1;
switch (role) {
case 1:
System.out.println("You're an admin");
break;
case 2:
System.out.println("Yoy're an moderator");
break;
default:
System.out.println("You're a guest");
}
}
}
FOR 循环
package com.Shayne;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 5; i++)
System.out.println("Hello World " + i);
}
}
While 循环
package com.Shayne;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = "";
while (!input.equals("quit")){
System.out.print("Input: ");
input = scanner.next().toLowerCase();
System.out.println(input);
}
}
}
Do-While 循环
package com.Shayne;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = "";
do {
System.out.print("Input: ");
input = scanner.next().toLowerCase();
System.out.println(input);
} while (!input.equals("quit"));
}
}
Break and Continue语句
package com.Shayne;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = "";
while (true){
System.out.print("Input: ");
input = scanner.next().toLowerCase();
if (input.equals("pass"))
continue;
if (input.equals("quit"))
break;;
System.out.println(input);
}
}
}
For-each-loop
package com.Shayne;
public class Main {
public static void main(String[] args) {
String[] fruits = {"Apple", "Mango", "Orange"};
// for-loop
for (int i = 0; i < fruits.length; i++)
System.out.println(fruits[i]);
// for-each-loop
for (String fruit: fruits)
System.out.println(fruit);
}
}
加入条件的Mortgage Calculator
package com.Shayne;
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Scanner;
public class Main {
//Mortgage Caculator
public static void main(String[] args) {
final byte MONTHS_IN_YEAR = 12;
final byte PERCENT = 100;
int principal = 0;
float monthlyInterest = 0;
int numberOfPayments = 0;
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("Principal: ");
principal = scanner.nextInt();
if (principal >= 1000 && principal <= 1_000_000)
break;
System.out.println("Enter a value between 1000 and 1000000");
}
while (true) {
System.out.print("Annual Interest Rate: ");
float annualInterest = scanner.nextFloat();
if (annualInterest >= 1 && annualInterest <= 30) {
monthlyInterest = annualInterest / PERCENT / MONTHS_IN_YEAR;
break;
}
System.out.println("Enter a value between 1 and 30.");
}
while (true) {
System.out.print("Period (Years): ");
byte years = scanner.nextByte();
if (years >=1 && years <= 30) {
numberOfPayments = years * MONTHS_IN_YEAR;
break;
}
System.out.println("Enter a value 1 and 30.");
}
NumberFormat mortgageFormatted = NumberFormat.getCurrencyInstance(Locale.US);
double mortgage = (principal * monthlyInterest * Math.pow(1 + monthlyInterest, numberOfPayments)) / (Math.pow(1 + monthlyInterest, numberOfPayments) - 1);
String result = mortgageFormatted.format(mortgage);
System.out.print("Mortgage: ");
System.out.println(result);
}
}
方法
package com.Shayne;
public class Main {
//Mortgage Caculator
public static void main(String[] args) {
greetUser("Shayne", "Chen");
}
public static void greetUser(String firstName, String lastName){
System.out.println("Hello " + firstName + " " + lastName);
}
}
package com.Shayne;
public class Main {
//Mortgage Caculator
public static void main(String[] args) {
String message = greetUser("Shayne", "Chen");
System.out.println(message);
}
public static String greetUser(String firstName, String lastName){
return "Hello " + firstName + " " + lastName;
}
}
加强版MortgageCalculator
package com.Shayne;
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Scanner;
public class Main {
//Mortgage Caculator
final static byte MONTHS_IN_YEAR = 12;
final static byte PERCENT = 100;
public static void main(String[] args) {
int principal = (int) readNumber("Principal: ", 1000, 1_000_000);
float annualInterest = (float)readNumber("Annual Interest Rate: ", 1, 30);
byte years = (byte) readNumber("period (Years): ", 1, 30);
printMortgage(principal, annualInterest, years);
printPaymentSchedule(principal, annualInterest, years);
}
private static void printPaymentSchedule(int principal, float annualInterest, byte years) {
System.out.println("nPAYMENT SCHEDULEn----------------");
for (int month = 1; month <= years * MONTHS_IN_YEAR; month++){
String balance = NumberFormat.getCurrencyInstance(Locale.US).format(calculateBalance(years, principal, annualInterest, month));
System.out.println(balance);
}
}
private static void printMortgage(int principal, float annualInterest, byte years) {
String mortgage = NumberFormat.getCurrencyInstance(Locale.US).format(calculateMortgage(principal, annualInterest, years));
System.out.println("nMORTGAGEn--------");
System.out.println("Monthly Patments: " + mortgage);
}
public static double readNumber(String prompt, double min, double max) {
Scanner scanner = new Scanner(System.in);
double value;
while (true) {
System.out.print(prompt);
value = scanner.nextFloat();
if (value >= min && value <= max)
break;
System.out.println("Enter a value between" + min + " and " + max);
}
return value;
}
public static double calculateMortgage(
int principal,
float annualInterest,
byte years) {
float monthlyInterest = annualInterest / PERCENT / MONTHS_IN_YEAR;
short numberOfPayments = (short) (years * MONTHS_IN_YEAR);
double mortgage = (principal * monthlyInterest * Math.pow(1 + monthlyInterest, numberOfPayments)) / (Math.pow(1 + monthlyInterest, numberOfPayments) - 1);
return mortgage;
}
public static double calculateBalance(byte years, int principal, float annualInterest, int numberOfPaymentMade) {
float monthlyInterest = annualInterest / PERCENT / MONTHS_IN_YEAR;
short numberOfPayments = (short) (years * MONTHS_IN_YEAR);
double balance = principal
* (Math.pow(1 + monthlyInterest, numberOfPayments) - Math.pow(1 + monthlyInterest, numberOfPaymentMade))
/ (Math.pow(1 + monthlyInterest, numberOfPayments) - 1);
return balance;
}
}



