选择语句和循环语句
选择语句
常见错误和陷阱
常见错误
- JAVA循环选择用的都是{},而不是空格区分,if、for、while后面是{}不是‘:’
- 注意悬空else,一般和最近的if是一对,否则用{}来表明。
- 避免冗余判断,例如if(even)而不是if(even==true)
- 浮点值的相等测试,一般浮点值的计算并不是精确等于的,比如0.1+0.1+0.1+0.1+0.1并不等于0.5,而是0.500000000000000001,所以在进行浮点值计算时通常采用一个非常小的值用于辅助判断,例如设置 ϵ = 1 0 − 14 \epsilon=10^{-14} ϵ=10−14来比较两个值是否相等。
常见陷阱
- 简化不二变量赋值
- 避免重复代码
产生随机数
1.生成一位的随机数:
System.currrentTimeMillis()%10
2.生成0.0-1.0之间的随机数:
Math.random()
产生双精度的随机值d且0.0 ≤ \leq ≤d<1.0
3.生成0-9的随机数:
(int)(Math.random()*10)
switch语句
switch(switch 表达式){
case 值1:语句(组)1;
break;
case 值2:语句(组)2;
break;
...
case 值n:语句(组)n;
break;
}
1.switch表达式必须能计算出一个char,string,int等类型的值。
2.case的判断必须是常量表达式
条件表达式
boolean-expression ? expression1:expression2
y=(x>0)?1:-1;
等价于:
if(x>0)
y=1
else
y=-1
操作费优先级
说明:
1、 该表中优先级按照从高到低的顺序书写,也就是优先级为1的优先级最高,优先级14的优先级最低。
2、 结合性是指运算符结合的顺序,通常都是从左到右。从右向左的运算符最典型的就是负号,例如3±4,则意义为3加-4,符号首先和运算符右侧的内容结合。
3、 instanceof作用是判断对象是否为某个类或接口类型,后续有详细介绍。
4、 注意区分正负号和加减号,以及按位与和逻辑与的区别
其实在实际的开发中,不需要去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号去进行替代,示例代码:
int m = 12;
int n = m << 1 + 2;
int n = m << (1 + 2); //这样更直观
这样书写代码,更方便编写代码,也便于代码的阅读和维护。
循环语句
输入输出重定向
- 输入重定向
java SentinelValue < input.txt
- 输出重定向
java ClassName< output.txt
例:十进制转换为十六进制
import java.util.Scanner;
public class Dec2Hex{
public static void main(String[] args){
Scanner input = new Scanner(http://System.in);
System.out.print("Enter a decimal number:");
int deciaml = input.nextInt();
String hex = "";
while(deciaml != 0){
int hexValue = decimal%16;
char hexDigit = (hexValue <= 9 && hexValue >= 0)?(char)(hexValue +'0'): (char)(hexValue -10 + 'A' );
hex = hexDigit + hex;
decimal = decimal / 16;
}
system.out.println("The hex number is "+ hex);
}
}
##例:判断回文串
package com.liuzhen.string_1;
import java.util.Scanner;
public class StringPalindrome {
//方法1:两头往中间扫
public boolean IsPalindrome1(String A){
char[] arrayA = A.toCharArray();
int top = 0;
int end = arrayA.length-1;
if(A.equals("") || A.equals(null)) //非法输入
return false;
while(top < end){
if(arrayA[top++] != arrayA[end--])
return false;
}
return true;
}
//方法2:中间往两头扫
public boolean IsPalindrome2(String A){
char[] arrayA = A.toCharArray();
int lenA = arrayA.length;
int mid = lenA/2;
int front; //前半部分
int back; //后半部分
if(lenA % 2 == 0){ //当字符串长度为偶数时
front = mid-1;
back = mid;
}
else{
front = mid -1;
back = mid + 1;
}
if(A.equals("") || A.equals(null))
return false;
while(front >= 0 && back < lenA){
if(arrayA[front--] != arrayA[back++])
return false;
}
return true;
}
public static void main(String[] args){
StringPalindrome test = new StringPalindrome();
Scanner in = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String A = in.nextLine();
if(test.IsPalindrome1(A))
System.out.println("使用方法1判断结果为,输入字符串是回文字符串");
else
System.out.println("使用方法1判断结果为,输入字符串不是回文字符串");
if(test.IsPalindrome2(A))
System.out.println("使用方法2判断结果为,输入字符串是回文字符串");
else
System.out.println("使用方法2判断结果为,输入字符串不是回文字符串");
}
}