- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
交换两个变量的值
public class Change{
public static void main(String[] args){
int x=10,y=20;
//方法一
int z=x;//定义一个临时变量
x=y;
y=z;
//方法二,好处:不用定义新变量,节省内存空间
//弊端:相加操作可能超出范围,有局限性只能是数值,不能是其他形式(方法一则是通用)
x=x+y;//两个相加为30
y=x-y;//30减去原先y的值结果为原先x的值
x=x-y;//30减去现在y的值(即之前x的值)结果为原先y的值
//方法三,了解即可,基本不用,只能用于整数
x=x^y;//(m^n)^n=m
y=x^y;//相当于(x^y)^y值为x,将x的值给了y
x=x^y;//现在的y是原先x的值,相当于(x^y)^x,值为原先y的值
}
}
三位数交换
import java.util.Scanner;//导包时注意分号******
/**
* 由键盘输入三个整数分别存入变量num1、num2、num3,将它们进行排序(使用if-else if-else),并且从小到大输出
*/
public class ifTxetTwo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("从键盘输入三个整数");
int num1 = scan.nextInt(), num2 = scan.nextInt(), num3 = scan.nextInt();
//我的方法(从第二个if开始都else),比较大小,交换顺序,不正确,(使用if-else if-else)只选择一个
int temp;//交换顺序,必须按照这个思路来,不能换顺序
if (num1 > num2) {
temp = num1;
num1 = num2;
num2 = temp;
}
if (num1 > num3) {//这个和下面换顺序就会出问题
temp = num1;
num1 = num3;
num3 = temp;
}
if (num2 > num3) {
temp = num2;
num2 = num3;
num3 = temp;
}
System.out.println("从大到小输出:" + num3 + " " + num2 + " " + num1);
//6中情况列出来(先确定两个的位置,然后第三个数往里插入)
if (num1 >= num2) {
if (num3 >= num1)
System.out.println(num2 + ", " + num1 + "," + num3);
else if (num3 <= num2)
System.out.println(num3 + ", " + num2 + "," + num1);
else
System.out.println(num2 + ", " + num3 + ", " + num1);
} else {
if (num3 >= num2)
System.out.println(num1 + "," + num2 + "," + num3);
else if (num3 <= num1)
System.out.println(num3 + "," + num1 + "," + num2);
else
System.out.println(num1 + ", " + num1 + ", " + num3);
}
}
}
彩票(if—else)(随机数)
假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入一个两位数,然后按照下面的规则判定用户是否能赢。
- 1)如果用户输入的数匹配彩票的实际顺序,奖金10 000美元。
- 2)如果用户输入的所有数字匹配彩票的所有数字,但顺序不一致,奖金3000美元。
- 3)如果用户输入的一个数字仅满足顺序情况下匹配彩票的一个数字,奖金1000美元。
- 4)如果用户输入的一个数字仅满足非顺序情况下匹配彩票的一个数字,奖金500美元。
- 5)如果用户输入的数字没有匹配任何一个数字,则彩票作废。
import java.util.Scanner;
public class IfTextThree {
public static void main(String[] args){
//取随机数
//double value=Math.random();//注意Math的m需要大写,范围[0.0,1.0)
//double value=Math.random()*90+10;//将[0.0,1.0)*90拓展到[0.0,90.0)再+10变为[10.0,100.0)
int value=(int)(Math.random()*90+10);//题目中要求是整数,用强制类型转换,结果变为[10,99]因为100是开区间取不到强转舍去小数部分
//随机数公式区间:[a,b] (数据类型)(Math.random()*(b-a+1)+a);本身是double型
Scanner scan=new Scanner(System.in);
System.out.println("请随机输入一个两位数");
int get=scan.nextInt();
if(get==value)
System.out.println("奖金10000$");
else{
int ge=value%10,shi=value/10;
int ge1=get%10,shi1=get/10;
if(ge*10+shi==get)
System.out.println("奖金3000$");
else if(ge1==ge||shi1==shi)
System.out.println("奖金1000$");
else if(shi1==ge||ge1==shi)
System.out.println("奖金500$");
else
System.out.println("无奖金");
}
System.out.println(value);
}
}
高富帅问题(字符串比较)
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出定的条件:高:180cm以上;富:财富1千万以上;帅:是。
- 如果这三个条件同时满足,则:“我一定要嫁给他!!”
- 如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。
- ”如果三个条件都不满足,则:“不嫁!”
import java.util.Scanner;
public class IfTextFour {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
System.out.println("请您输入身高 xxx cm");
int height= scan.nextInt();
System.out.println("请输入财富(万)");
int rich= scan.nextInt();
System.out.println("请输入长相帅否,帅true,否false");
boolean yesno = scan.nextBoolean();
if(height>=180&&rich>=1000&&yesno==true)//第三个可以直接写成&&yesno
System.out.println("我一定要嫁给他!!");
else if(height>=180||rich>=1000||yesno==true)
System.out.println("嫁吧,比上不足,比下有余。");
else
System.out.println("不嫁!");
/**
* 判断用户输入的字符串是否和我们想的一样
* 变量名.equals("是")
* 注意:结果是boolean类型
* 例子
*/
String panduan="中";
boolean trueis=panduan.equals("中");
System.out.println(trueis);
}
}
判断是否是闰年
import java.util.Scanner;
public class IsYearText {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
System.out.println("输入年份");
int year=scan.nextInt();
//方法一
if(year%100!=0){
if(year%400==0)
System.out.println("是闰年");
else
System.out.println("不是闰年");
}else {
if (year % 4 == 0)
System.out.println("是闰年");
else
System.out.println("不是闰年");
}
//(简单)方法二
if((year%4==0&&year%100!=0)||year%400==0){
System.out.println("是闰年");
}else{
System.out.println("不是闰年");
}
}
}
水仙花数打印(各位数字的取出)
/**
* 输出所有的水仙花数
* 水仙花数:一个三位数(各个位上的立方和为这个数)
* abc=a*a*a+b*b*b+c*c*c
*/
public class FlowerMunber {
public static void main(String[] args){
for(int i=100;i<=999;i++){
int a=i/100,b=i/10%10,c=i%10;
if(i==a*a*a+b*b*b+c*c*c){//注意双等号
System.out.println(i);
}
}
//给出一个整数,打印十位数,个位数,百位数的值
int z=234;
System.out.println("个位数:"+z%100%10+"十位数:"+z%100/10+"百位数:"+z/100);//十位也可z/10%10,个位z%10
}
}
最大公约数、最小公倍数
import java.util.Scanner;
/**
* 输入两个正整数m,n求其最大公约数和最小公倍数
*/
public class ForText1 {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int m= scan.nextInt(),n= scan.nextInt();
//最大公约数
for(int i=m;i>=1;i--){
if(m%i==0){
if(n%i==0) {
System.out.println(i);
break;
}
}
}
//最小公倍数
for(int i=m;i<=n*m;i++){
if(i%m==0){//两个if可以合并成一个if(i%m==0&&i%n==0)
if(i%n==0){
System.out.println(i);
break;
}
}
}
}
}
输出*号塔(找规律)
**
* 输出结果: * 三个空格,一个*
* * * 两个空格,*空格*
* * * *
* * * * *
* * * *
* * *
* *
* 这种类型的题注意找规律
*/
public class ExeFor1 {
public static void main(String[] args){
//上半部分
for(int i=1;i<=4;i++){
for(int j=1;j<=4-i;j++){
System.out.print(" ");
}
for(int j=1;j<=i;j++){
System.out.print("* ");
}
System.out.println();
}
//下半部分
for(int i=1;i<=3;i++){
for(int j=1;j<=i;j++){
System.out.print(" ");
}
for(int j=1;j<=4-i;j++){
System.out.print("* ");
}
System.out.println();
}
}
}
九九乘法表
/**
* 打印99乘法表
*/
public class For99 {//左上和左下打印完成、右上和右下未完成(过段时间再思考)
public static void main(String[] args){
//打印全部
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
System.out.print(i+"*"+j+"="+i*j+'\t');//Java中的\t和C中一样,但注意“”是原样输出,要用单引号
}
System.out.println();//注意Java中的println和print的区别
}
System.out.println("***********************************");
//打印左下
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+'\t');
}
System.out.println();
}
System.out.println("***********************************");
//打印左上
for(int i=1;i<=9;i++){
for(int j=1;j<=9-i+1;j++){
System.out.print(i+"*"+j+"="+i*j+'\t');
}
System.out.println();
}
System.out.println("***********************************");
//打印右下(未完成)
for(int i=1;i<=9;i++){
for(int k=1;k<=9-i;k++){
System.out.print('\t');
}
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+'\t');
}
System.out.println();
}
System.out.println("***********************************");
//打印左上(第二种方法)
for(int i=1;i<=9;i++){
// for(int k=i;k<=9;k++){
// System.out.print('\t');
// }
for(int j=i;j<=9;j++){
System.out.print(i+"*"+j+"="+i*j+'\t');
}
System.out.println();
}
System.out.println("***********************************");
//打印金字塔
for(int i=1;i<=9;i++){
for(int k=1;k<=9-i;k++){
System.out.print('\t');
}
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+'\t');
}
System.out.println();
}
}
}
输出质数(并通过计算时间来计算效率)(获取毫秒数)
/**
* 打印100以内的所有质数
* 并运算效率
*/
public class For100zhi {
public static void main(String[] args){
//boolean flag=true;//flag判断应放在第一层循环里面,否则上一次的结果会影响下一次循环
long srart=System.currentTimeMillis();//获取当前的毫秒数(距离1970年1月1日00:00:00的毫秒数)
int count=0;
for(int i=2;i<=10000;i++){//注意:1不是质数,最小的质数是2
boolean flag=true;
for(int j=2;j<=i/2;j++){//也可以写根号下i,写法:Math.sqrt(i);
if(i%j==0){
flag=false;
break;//break的作用是跳出for循环,而不是跳出if,没有这个作用
//System.out.println(i);//break、continue后面不能声明执行语句,否则编译都过不去
}
}
if(flag)
System.out.println(i);
//count++;
}
//System.out.println(count);
long end=System.currentTimeMillis();//获取当前的毫秒数(距离1970年1月1日00:00:00的毫秒数)
System.out.println(end-srart);//结果单位是毫秒 1s=1000ms
//输出语句很占运行速度,只计数(14毫秒),含输出语句(24毫秒)
System.out.println("***********************");//质数输出,方式二(更简单一点)代码量更少
lab:for(int i=2;i<=10;i++){//注意:1不是质数,最小的质数是2
for(int j=2;j<=i/2;j++){//也可以写根号下i,写法:Math.sqrt(i);
if(i%j==0){
continue lab;
}
}
//执行到此步骤都是质数
System.out.println(i);
}
}
}