一、优先级
1.1 先判断5>3,true 6>4 true;然后true==true ,最后是true;
1.2 6>5,true;而true和4无法比较。所以该判断出错;
1.3 和1.2比较,可以知道该比较可以正常进行
1.4 错误,
1.5 >号优先级要高于=。所以先判断b>false ,这个无法判断。所以错误
1.6 先判断a和b true 或者false,但是true和false 没法比较大小,所以也错误。
2、浮点数判断大小
package hello;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
double a=1.0;
double b=0.2+0.2+0.2+0.2+0.2;
double c=0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1;
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c);
System.out.println(a==c);//浮点数直接判断相等很容易出错
System.out.println(Math.abs(a-c)<1e-6);//差值和很小的一个数比较
}
}
明显看到c逼近1,但是不是1,所以直接判断a==c,false ;
浮点数比较是要用差值比较。
3、
4、
switch 遇到break才退出,否则会越过case 继续做下一个case的任务。
package hello;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int a=1;
switch(a)
{
case 1:
case 2:
System.out.println("您好");
case 3:
System.out.println("晚上好");
break;
default:
System.out.println("再见");
break;
}
}
}
package hello;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int a=4;
switch(a)
{
default:
System.out.println("再见");
case 1:
case 2:
System.out.println("您好");
case 3:
System.out.println("晚上好");
break;
}
}
}
二、循环
2.1
package hello;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int num=in.nextInt();
int n=0;
while(num!=0)
{
n++;
num=num/10;
}
System.out.println(n);
}
}
输入为0时是有问题的。
package hello;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int num;
int n=0;
num=in.nextInt();
do
{
n++;
num=num/10;
}
while(num!=0);//分号别忘了
System.out.println(n);
}
}
2.2
package hello;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int num=(int)(Math.random()*100);//生成随机数
int i=1;//次数
int n;
n=in.nextInt();
while(n!=num)
{
if(n>num)
{
System.out.println("大了");
}
else
{
System.out.println("小了");
}
n=in.nextInt();
i++;
}
System.out.println("随机数为:"+num+",猜了"+i+"次。");
}
}
三、循环控制
int 4个字节,4*8=32位。表示的最大数2^31-1,最小数-2^31。
3.1
package hello;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
System.out.println("100以内素数有:");
int num=0;
for(int i=2;i<=100;i++)
{
int flag=0;//素数标志
for(int j=2;j<=(int)Math.sqrt(i);j++)
{
if(i%j==0)//不是素数
{
flag=1;//不是素数
break;
}
}
if(flag==0)//素数
{
num++;
System.out.println(i);
}
}
System.out.println("100以内素数个数为:"+num);
}
}
3.2
枚举方法求多种情况。
package hello;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int amount = in.nextInt();//总钱数
for ( int one = 0; one <=amount; ++one )//1块钱从1到33张
{
for ( int five = 0; five <= amount/5; ++five )//5块钱 从1到6张
{
for ( int ten = 0; ten <= amount/10; ++ten )//10块钱 从1到3张
{
for ( int twenty = 0; twenty <= amount/20; ++twenty )//20块钱 1张
{
if ( one+five*5+ten*10+twenty*20 == amount )
{
System.out.println(one+"张1元,"+five+"张5元,"+ten+"张10元,"+twenty+"张20元-->"+amount);
}
}
}
}
}
}
}
多个循环跳出
3、
3.1
package Hello;
import java.util.Scanner;
public class hello_test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int n=in.nextInt();
double sum=0.0;
for(int i=1;i<=n;i++)
{
sum+=(1.0/i);
}
System.out.println(sum);//输出原数
System.out.printf("%.2f",sum);//输出 保留两位小数;注意输出的函数变了
}
}
3.2
(1)利用标志位,正负变换
package Hello;
import java.util.Scanner;
public class hello_test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);//创建扫描器
int n=in.nextInt();
double sum=0.0;
int flag=1;//标志位
for(int i=1;i<=n;i++)
{
sum+=(flag*(1.0/i));
flag=-flag;
}
System.out.println(sum);//输出原数
System.out.printf("%.2f",sum);//输出 保留两位小数;注意输出的函数变了
in.close();//关闭扫描器
}
}
(2)
package Hello;
import java.util.Scanner;
public class hello_test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);//创建扫描器
int n=in.nextInt();
double sum=0.0;
for(int i=1;i<=n;i++)
{
sum+=Math.pow(-1, i+1)*(1.0/i);//注意乘方怎么表示
}
System.out.println(sum);//输出原数
System.out.printf("%.2f",sum);//输出 保留两位小数;注意输出的函数变了
in.close();//关闭扫描器
}
}
4、
(1)逆向递减求
package Hello;
import java.util.Scanner;
public class hello_test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);//创建扫描器
int n=in.nextInt();
int m=in.nextInt(); //输入两个值
int i=n;
while(n%i!=0 || m%i!=0)
{
i--;
}
System.out.println(m+"和"+n+"的最大公约数是:"+i);
in.close();//关闭扫描器
}
}
(2)辗转相除求
package Hello;
import java.util.Scanner;
public class hello_test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);//创建扫描器
int n=in.nextInt();
int m=in.nextInt(); //输入两个值
int a,b,y;
a=n;
b=m;
y=m;
while(a%b!=0) //辗转相除法
{
y=a%b;//余数
a=b;
b=y;
}
System.out.println(m+"和"+n+"的最大公约数是:"+b);
in.close();//关闭扫描器
}
}