首页 > 技术文章 > Java 判断 循环

ruo-li-suo-yi 2018-05-24 22:43 原文

一、优先级

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();//关闭扫描器
	}

}

  

 

推荐阅读