前言
一、作业
选a。a选项\可转,\”可转”。c被转意为/.b为·”\“ hello ”\“.
二、swith
不能做swith数据类型的参数有哪些:long不行;float,double,boolean不行。不能是一个表达式如(a<4)
注意string类型可以。
三、调试
逐过程(跳过函数),逐语句(进入函数)
调试:进入调试,逐过程或逐语句进行调试,结束调试。
四、continue与break
break跳出一层循环。continue是这之后的代码都不进行了,跳回循环部分。
int i=1;
while(i<=100)
{
if(i%30==0)
{
System.out.println(i);
i++; //注意:如果没有i++,此代码会进入循环
continue;
}
i++;
}
五、输入输出
输出格式
第三种基本不用
System.out.println("输出换行");
System.out.print("输出不换行");
System.out.printf("%s","格式化输出");
输入
在输入Scanner时,在单词没写完时会有导入包的提示,按回车即可导入包了。(或者写完单词按alt+enter)。
import java.util.Scanner;
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();//输入整数
System.out.println(a);
double b=sc.nextDouble();//输入小数
System.out.println(b);
输入字符串
nextLine能输入字符串中空格,next遇到空格就停止了。
注意nextLine如果在之后,要在使用前用 sc.nextLine();只有在nextLine必须用这把回车消除才能输入,其他不用。
Scanner sc=new Scanner(System.in);
System.out.println("输入字符串");
String s=sc.next();
System.out.println(s);
sc.nextLine();
!!!//只有在nextLine必须用这把回车消除才能输入,其他不用。
System.out.println("输入字符串");
String ss=sc.nextLine();
System.out.println(ss);
实现持续输入打印的效果:
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt())
{
int a=sc.nextInt();
System.out.println(a);
}
按ctrl+d停止输入。
ctrl+c是终止程序的意思。
猜数字
Scanner sc=new Scanner(System.in);
Random dom=new Random();//随机数生成方法
int num=dom.nextInt(100);//100是边界
System.out.println("作弊:"+num);
while(true)
{
int a=sc.nextInt();
if(a>num)
{
System.out.println("猜大了");
}
else if(a==num)
{
System.out.println("猜对了");
break;
}
else
{
System.out.println("猜小了");
}
}
若要生成50到100的随机数:
int num=dom.nextInt(50)+50;(原本为0到50,后都加50,即可。)
六、练习题
判断素数
Scanner sc=new Scanner(System.in);
int d=sc.nextInt();
int i=2;
for(;i<d;i++)
{
if(d%i==0)
{
System.out.println("不是素数");
break;
}
}
if(i==d)
{
System.out.println("是素数");
}
若要改善一下:Math.squrt()不用导包,它是求根号的。
由于有倍数关系,利用根号使不用再遍历与其成倍数的,所以次数减少·,效率更高。
Scanner sc=new Scanner(System.in);
int d=sc.nextInt();
int i=2;
for(;i<=Math.sqrt(d);i++)//16--》4 17---》4
{
if(d%i==0)
{
System.out.println("不是素数");
break;
}
}
if(i>Math.sqrt(d))
{
System.out.println("是素数");
}
求最大公约数,辗转相除法。
因为如24%18=6,a=18,b=6;然后c=0即可退出得到。若是18%24=18,a=24,b=18。
int c=0;
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
c=a%b;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
System.out.println(b);
水仙花数
其各位数的位数次方和恰好等于本身
//水仙花数
for(int i=1;i<=999999;i++)
{
int count=0;
int tmp=i;
while(tmp!=0)
{
count++;
tmp=tmp/10;
}
tmp=i;
int sum=0;//必须放里面,因为每一个sum都是从0开始的,放外面就成累加了。
while(tmp!=0)
{
sum+=Math.pow(tmp%10,count);
tmp=tmp/10;
}
if(i==sum)
{
System.out.println(i);
}
}
方一,位数固定为32个比特位
int n=-1;
int count=0;
//方一
for(int i=0;i<32;i++)
{
if((n&1)!=0)
{
count++;
}
n=n>>1;
}
System.out.println(count);
方二:只有移动到数为0就不移动了。
int n=15;
int count=0;
while(n!=0)
{
if((n&1)!=0)
{
count++;
}
n=n>>>1;
}
System.out.println(count);
方三:每一次n&n-1都少了一个1,最后有几个1就少几个1.
int n=-1;
int count=0;
while(n!=0)
{
n=n&(n-1);
count++;
}
System.out.println(count);
获取1个数的奇数位和偶数位
注意奇数位从0开始,然后移动30即可。
偶数从1开始,移动31即可。
int n=39;
//奇数位输出
int s=0;
int p=0;
for(int i=30;i>=0;i-=2)
{
System.out.print( ((n>>i) & 1)+" ");!!如果要写成一个式,要将其用()括起来。
}
System.out.println();
//偶数位输出
for(int i=31;i>=1;i-=2)
{
s=n>>i;
p=s&1;
System.out.print(p+" ");
}