一、输入一个值,求100到这个值范围内的水仙花数
(例水仙花数:153 =111+555+3+3+3)
import java.util.Scanner;
public class Flowers {
public static void flowers(int n) { //写一个求水仙花数的函数
int a = 0;
int b = 0;
int c = 0;
for (int i = 100; i <= n; i++) { // i的值从100到输入的值循环
a = i / 100; // 求出百位的值,例如:371,371/100=3
b = i % 100 / 10; //求出十位的值,371%100=71,71/10=7
c = i % 10; // 求出各位的值,371%10=1
if (a * a * a + b * b * b + c * c * c == i) { // 判断是否为水仙花数
System.out.println(i);
}
}
}
public static void main(String[] args) {
System.out.println("请输入一个数:");
Scanner scanner = new Scanner(System.in);//扫描类,从键盘获取一个整数
int n = scanner.nextInt();
System.out.println("比"+n+"小的水仙花数有:");
flowers(n); //调用flowers函数,求出水仙花数
}
}
执行结果:
二、求一个数字是不是完数
(例:数字6, 因子:2,3,1, 他们的和是数字6 ( 0不是完数!!!)
import java.util.Scanner;
public class Number {
public static boolean fun(int n) {
int sum = 0;
for (int i = 1; i < n; i++) { // i从1开始循环,到输入的数为止
if (n % i == 0) { // 若输入的数n能整除i,则i是n的因子
sum += i; //因子循环累加
}
}
if (sum == n && n != 0) { //累加的和等于n并且n不等于0
System.out.println("您输入的数字"+n+"是完数!");
return true;
}
System.out.println("您输入的数字"+n+"不是完数!");
return false;
}
public static void main(String[] args) { //主函数
System.out.println("请输入一个数字");
Scanner scanner = new Scanner(System.in);//扫描类
int p = scanner.nextInt();
fun(p); //调用fun函数;
}
}
执行结果:
三、求一个数字是几位数?顺序打印数字,逆序打印数字
(例:123,是三位数,顺序打印:1 2 3 ,逆序打印: 3 2 1)
import java.util.Scanner;
public class HowNumber {
public static int HowNum(int num) {
int count = 0;//定义一个计数器,计算while语句的循环次数
while (num != 0) {
num /= 10;// 除以10,直到结果等于0,除几次就有几位,例:123 /10 = 12 ,12/10 = 1 ,1/10 = 0
count++; //while循环一次,count计数一次
}
return count; //返回count的值
}
//顺序得到数字,例: 123/100 = 1 23/10 = 2 3/1 = 3
public static void printOrder(int num) {
int count = HowNum(num);
int power = (int) Math.pow((double) 10, (double) (count - 1));//100
if (num < 0) { //输入的值为负数时,先求它的相反数
num = -num;
}
if (num == 0) { //输入的值为0时,返回
System.out.println("请输入不为0的数字");
return;
}
int tmp = 0;
while (power != 0) { //10 1
tmp = num / power; //123/100 == 1 23/10 = 2 3 /1 = 3
System.out.print(tmp + " ");
num = num % power; //123 % 100 = 23 23 % 10 = 3 3 % 1 == 0
power /= 10; //100/10 = 10 1 1/10 = 0
}
System.out.println();
}
//逆序打印 ,例:123 , 123 % 10 = 3 12 % 10 = 2 1%10 = 1
public static void reverse(int num) {
if (num < 0) {
num = -num;
}
if (num == 0) {
System.out.println("请输入不为0的数字");
return;
}
int tmp = 0;
while (num != 0) {
tmp = num % 10;
System.out.print(tmp + " ");
num /= 10;
}
}
public static void main(String[] args) {
System.out.println("输入一个数:");
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
System.out.println("输入的数有"+HowNum(n)+"位");
printOrder(n);
reverse(n);
}
}
执行结果:
四、求a+aa+aaa+aaaa的和
(例:2+22+222+2222 =2468)
import java.util.Scanner;
public class Sum {
public static int sumA(int n, int a ) {
int sum = a;
int tmp = a;
for (int i = 2; i <= n; i++) { //i从2开始,至少累加到两位
tmp = tmp * 10 + a; // 第①次循环tmp = 1*10+1=11; 第②次循环tmp = 11*10+1 = 111;
sum = sum + tmp; //第①次循环sum = 1 + 11 = 12;第②次循环sum = 12 + 111 = 123;
}
return sum;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入累加到数的个数:");
int n = scanner.nextInt();
System.out.println("输入1-9的值:");
int a = scanner.nextInt();
int sum = sumA(n,a); //调用sumA函数计算
System.out.println("结果:"+sum);
}
}
执行结果:
五、用for循环产生随机数
import java.util.Random;
import java.util.Scanner;
public class RandomTest {
public static void randomNum(int max ,int min ,int how) {
Random random = new Random(); //使用Random函数产生随机数
for (int i = 0; i < how; i++) { //控制产生随机数的个数
int n = random.nextInt(max - min + 1) + min; //[min,max]包括最大值的随机数
System.out.print(n + " "); //打印出随机数
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入最大数;");
int a = scanner.nextInt();
System.out.println("输入最小数:");
int b = scanner.nextInt();
System.out.println("输入要产生的随机数的个数;");
int c = scanner.nextInt();
randomNum(a,b,c); //调用randomNum产生随机数
}
}
执行结果:
六、求斐波那契数列具体项的值
斐波那契数列:1 1 2 3 5 8 13 21 34,(从第三项开始每一项等于前两项的和)
import java.util.Scanner;
public class Sequence {
public static int fibonaci(int n) {
int a = 1; //定义第一项为1
int b = 1; //定义第二项为1
int c = 0; //定义第三项为0
for (int i = 3; i <= n; i++) {
c = a + b; //前两项的和
a = b;
b = c; //前两项的和赋给第三项
}
return c;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入要求的项数:");
int n = scanner.nextInt();
System.out.println("第"+n+"项为:"+ fibonaci(n));
}
}
执行结果:
七、Java程序调试之打断点
以如下代码为例,用Intellij idea 进行编程调试, 判断2进制数中1的个数。
import java.util.Scanner;
public class TestDemo { //和数字减一的值进行与运算,直到结果为0,与几次,就有几个1,
public static int numberOf(int num) { //写一个函数numberOf
int count = 0; //给计数器count赋初值0
while(num != 0) { //num等于0跳出while循环
count++; //计数器自加
num = num & (num - 1); //与其减一的值相与,直到结果为0,用count计数
}
return count; //count返回的就是二进制数中1的个数
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); //扫描类
System.out.println("输入一个数:");
int a = scanner.nextInt();//从键盘获取数字
System.out.println("这个数的2进制中有"+numberOf(a)+"个1");
}
}
执行结果:
打断点调试这段代码:
①在代码行中选定目标行,在左侧栏鼠标左击,会产生一个红色的实心圆圈。如图:
②在idea的右上标题栏中选择Debug(绿色的甲壳虫)开启调试会话,或直接键盘按Shift+F9,点击之后程序运行,输入一个数字10,回车直接进入后,显示输入的num值为10
③点击下图中的第二个箭头,使程序向下执行(为了方便理解程序,点一步截了一个图,如下:)
第一个箭头:step over步越→如果当前语句包含函数调用,则执行完该函数并返回到下一条语句
第二个箭头:step into步进→如果当前语句包含函数调用,则执行进入该函数
第三个箭头:force step into→可以进入所有的方法,比如jdk的方法
第四个箭头:step out→跳出已进入的方法