Java入门 - 数据练习、循环结构、数组练习

2-01 数据类型练习

随意选择若干变量名,将其分别定义为整型、浮点型、字符型、布尔型并赋适当初值,并输出结果。可参考下面的代码。下面这段代码缺失了一部分内容,请将确实的内容补全,让最后的输出和输出格式一致

public class Main {
    public static void main(String args[]) {
        byte b = 0x55;
        short s = 0x55ff;
        int i = 1000000;
        long l = 0xffffL;
        char c = 'a';
        float f = 0.23F;
        double d = 0.7E-3;
        boolean B = true;
        String S = "这是字符串类数据类型";
        System.out.println("字节型变量 b = " + b);
        System.out.println("短整型变量 s = " + s);
        System.out.println("整型变量 i = " + i);
        System.out.println("长整型变量 l = " + l);
        System.out.println("字符型变量 c = " + c);
        System.out.println("浮点型变量 f = " + f);
        System.out.println("双精度变量 d = " + d);
        System.out.println("布尔型变量 B = " + B);
        System.out.println("字符串类对象 S = " + S);
    }
}

2-02 System.out.printf入门

输入5个数,然后使用指定格式进行输出。

输入格式:

输入5个数:a b x1 x2 x3。a、x1、x2、x3为整数,b为浮点数

输出格式:

第1行:以“十进制 八进制 十六进制”格式输出a
第2行:输出b,长度6(包含小数点)保留二位小数。
第3行:输出"x1 x2 x3"
第4行:输出"x2 x3 x1"
第5行:输出"x3 x1 x2"
其中3-5行,每个元素输出长度位5,元素之间有一个空格,右对齐。

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        int a ,x1,x2,x3;
        float b;
        Scanner scanner = new Scanner(System.in);

        a = scanner.nextInt();
        b = scanner.nextFloat();
        x1 = scanner.nextInt();
        x2 = scanner.nextInt();
        x3 = scanner.nextInt();
        
        System.out.printf("%d %o %x\n",a,a,a);
        System.out.printf("%6.2f\n",b);
        System.out.printf("%5d %5d %5d\n",x1,x2,x3);
        System.out.printf("%5d %5d %5d\n",x2,x3,x1);
        System.out.printf("%5d %5d %5d\n",x3,x1,x2);
    }
}

2-03 求两个整数之和

求两个整数之和。从键盘输入2个整数,然后它们的和,按规定格式输出。

输入格式:

从键盘输入2个正整数A和B,中间有1个空格。

输出格式:

计算它们的和,按如下形式输出:A+B=C

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        int A,B,C;
        Scanner scanner = new Scanner(System.in);
        
        A = scanner.nextInt();
        B = scanner.nextInt();
        
        C=A+B;
        System.out.printf("%d+%d=%d",A,B,C);
        
        System.out.println(String.format("%d+%d=%d", A, B, C)); 
        // 使用 String.format 创建格式化的字符串,然后传递给 println
    }
}

2-04 买糖果

糖果3角钱一块,爸爸给小瑜n元钱,请你告诉小瑜最多能买几块糖,还剩几角钱?

输入格式:

输入爸爸给小瑜的钱n元,n为整数。

输出格式:

小瑜最多能买回的糖块数以及剩下的钱(单位为:角),用1个空格分隔。

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        int n,a,b;
        Scanner scanner=new Scanner(System.in);
        n= scanner.nextInt();

        a = (n*10)/3;//糖果块数
        b = n*10-a*3;//所剩的钱
        System.out.printf("%d %d",a,b);
    }
}

2-05 三个整数和差积与平均值

给出三个整数,请你设计一个程序,求出这三个数的和、乘积和平均数。

输入格式:

输入只有三个正整数a、b、c。数据之间用一个空格隔开。

输出格式:

输出一行,包括三个的和、乘积、平均数。 数据之间用一个空格隔开,其中平均数保留小数后面两位。

import java.util.Scanner;
public class Main
{
    public static void main(String[] args) {
        int a,b,c;
        Scanner scanner = new Scanner(System.in);
        a = scanner.nextInt();
        b = scanner.nextInt();
        c = scanner.nextInt();
        int m,n ;
        double k;
        m = a+b+c;
        n = a*b*c;
        k = (double)m/3;
        System.out.printf("%d %d %.2f",m,n,k);
    }
}

2-06 输入输出

从键盘输入一个整数,然后输入一个浮点数(带小数点的数)。

对两个数求和,并输出。

然后对和进行开根号并输出。

保留6位小数输出。

输入格式:

整数x 浮点数y

输出格式:

整数与浮点数的和

和的开根号

和的开根号的前6位小数

import java.util.Scanner;
public class Main
{
    public static void main(String[] args) {
        int a;
        double b,c,d;
        Scanner scanner = new Scanner(System.in);
        a = scanner.nextInt();
        b = scanner.nextDouble();
        c = (double)a+b;
        d = Math.sqrt(c);
        System.out.println(c);
        System.out.println(d);
        System.out.printf("%.6f\n",d);

    }
}

2-07 判断闰年

根据输入的正整数y所代表的年份,计算输出该年份是否为闰年
闰年的判断标准:

①能够被4整除且不能被100整除的年份

②或者能够被400整除的年份

输入格式:

输入n取值范围是 【1..3000】

输出格式:

是闰年,输出 yes

非闰年,输出 no

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        int a;
        Scanner scanner = new Scanner(System.in);
        a = scanner.nextInt();

        if((a%4==0 && a%100!=0) || a%400==0){
            System.out.println("yes");
        }else{
            System.out.printf("no");
        }
    }
}

2-09 选择运输成本

输入格式:

输入包裹重量。

输出格式:

如果重量为负数或者0,则显示信息“Invalid input”。如果重量大于20,显示信息“The package cannot be shipped”。否则,则按照包裹重量,显示运输成本。

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        int weight;
        Scanner scanner = new Scanner(System.in);
        weight = scanner.nextInt();

        if(weight<=0){
            System.out.println("Invalid input");
        }
        if(weight>20){
            System.out.println("The package cannot be shipped");
        }
        if(weight>0 && weight<=1){
            System.out.println(3.5);
        } else if (weight>1 && weight<=3) {
            System.out.println(5.5);
        } else if (weight>3 && weight<=10) {
            System.out.println(8.5);
        }else if(weight>10 && weight<=20){
            System.out.println(10.5);
        }
    }
}

2-10 计算工资数

某公司标准上班时间是120小时,每小时工钱是20元, 如果上班时间超出了120小时,超出部分每小时按2倍工资发放。请编写程序计算员工月工资。

输入格式:

输入一个员工的工作小时数。

输出格式:

输出这个员工的工资数。如果输入的工作小时数<=0,则输出0。

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        int hour;
        Scanner scanner = new Scanner(System.in);
        hour = scanner.nextInt();

        if(hour<=0){
            System.out.println(0);
        } else if (hour>0 && hour<=120) {
            System.out.println(20*hour);
        }else {
            System.out.println(20*120+(hour-120)*40);
        }
    }
}

2-11(选择结构)switch 古代的年龄称谓

输入一个人的年龄(岁),判断出他属于哪个年龄段 ?

0-9 :垂髫之年;

10-19: 志学之年;

20-29 :弱冠之年;

30-39 :而立之年;

40-49 :不惑之年;

50-59: 知命之年;

60-69 :花甲之年;

70-79 :古稀之年;

80-89 :杖朝之年;

90-99 :耄耋之年。

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        int age;
        Scanner scanner = new Scanner(System.in);
        age = scanner.nextInt();

        switch(age/10){
            case 0:
                System.out.println("垂髫之年") ;break;
            case 1:
                System.out.println(" 志学之年") ;break;
            case 2:
                System.out.println("弱冠之年") ;break;
            case 3:
                System.out.println("而立之年") ;break;
            case 4:
                System.out.println("不惑之年") ;break;
            case 5:
                System.out.println("知命之年") ;break;
            case 6:
                System.out.println("花甲之年") ;break;
            case 7:
                System.out.println("古稀之年") ;break;
            case 8:
                System.out.println("杖朝之年") ;break;
            case 9:
                System.out.println("耄耋之年") ;break;
        }
    }
}

2-12(选择结构)switch 给出一个月的总天数

编写程序,提示用户输入月份和年份,然后显示这个月的天数。

输入格式:

输入任意符合范围(1月~12月)的月份和(1900年~9999年)年份,且两个值之间空格分隔。

输出格式:

输出给定年份和月份的天数。

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int month,year;
        month= scanner.nextInt();
        year = scanner.nextInt();

        int a;
        a=year%4;
        if((a==0)&&(month==2)){
            System.out.println(29);

        }
        else{
            switch (month){
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    System.out.println(31);break;
                case 2:
                    System.out.println(28);break;
                case 4:
                case 6:
                case 9:
                case 11:
                    System.out.println(30);break;
            }

        }
    }
}

2-13(循环结构) ——求和(背)

输入一组数,将其中的奇数、偶数分别求和并输出

输入格式:

输入n,然后输入n个整数

输出格式:

奇数和=x, 偶数和=y
其中x,y分别代表奇数和与偶数和。逗号(,)后面有一个空格。

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        int sum_ji=0,sum_ou=0;
        Scanner scanner = new Scanner(System.in);
        // 读取用户输入的整数n
        int n = scanner.nextInt();

        // 创建一个长度为n的整数数组来存储输入的数字
        int[] numbers = new int[n];

        // 读取用户输入的整数并存储在数组中
        for (int i = 0; i < n; i++) {
            numbers[i] = scanner.nextInt();
        }
        for (int number : numbers){
            if (number%2==0){
                sum_ou+=number;
            }else{
                sum_ji+=number;
            }
        }
        System.out.printf("奇数和=%d, 偶数和=%d",sum_ji,sum_ou);
    }
}

2-14(循环结构)统计符合条件元素的个数

统计1...n的闭区间中,能够被3整除元素的奇数和偶数的个数

输入格式:

输入值n的范围是 【1..1000】

输出格式:

奇数个数,偶数个数

import java.util.Scanner;
public class Main
{
    public static void main(String[] args) {
        int m,count_ou,count_ji;
        Scanner scanner = new Scanner(System.in);
        m = scanner.nextInt();
        count_ou=0;
        count_ji=0;
        for(int i=1;i<=m;i++){
            if(i%3==0){
                //求偶数
                if(i%2==0){
                    count_ou++;
                }else{
                    count_ji++;
                }
            }
        }
        System.out.printf("%d,%d",count_ji,count_ou);
    }
}

***注意题目是能够整除3的整数,并且是循环遍历

2-15(循环结构)爱因斯坦台阶问题

编写一个程序解决爱因斯坦台阶问题:有人走一台阶,若以每步两级最后剩一级;若每步走三级则剩两级;若每步走四级则剩三级;若每步走五级则剩四级;若每步走六级则剩五级;若每步走七级则刚好不剩。问台阶共有多少级?

输入格式:

输出格式:

台阶总数

public class Main
{
    public static void main(String[] args) {
        int i=200;
        for(int m=1;m<i;m++)
        if(m%2==1 && m%3==2 && m%4==3 && m%5==4 && m%6==5 && m%7==0){
            System.out.println(m);
            break;
        }
    }
}

***找到第一个符合的台阶数就break

2-16(循环结构)判断一个数是否为回文数(背)

如果一个数与它的反转数相等,则该数为回文数。输入一个数,判断是否为回文数。

输入格式:

输入一个数

输出格式:

若XX是回文数,则输出“XX 是回文数”,若不是,则输出“XX 不是回文数”

import java.util.Scanner;

public class Main {
    public static boolean b(int num) {
        String c = String.valueOf(num);
        //创建一个StringBuilder对象,并将字符串c传递给它。然后调用reverse()方法来反转字符串,最后调用toString()将反转后的字符串转换为String类型
        String a = new StringBuilder(c).reverse().toString();

        //比较原始字符串c和反转后的字符串a。如果两者相等,说明num是回文数,返回true;否则返回false。
        return c.equals(a);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();

        if (b(num)) {
            System.out.print(num + " 是回文数");
        } else {
            System.out.print(num + " 不是回文数");
        }
    }
}

2-17(循环结构) 求13-23+33-43+…+973-983+993-1003的值

public class Main {

	public static void main(String[] args) {

		int a,sum;
		a=0;
		for(int i=1;i<=100;i++) {
			//判断是否为偶数
			if(i%2==0) {
				sum=(-i)*10-3;
			}else {
				sum=i*10+3;
			}
			a+=sum;
		}
		System.out.println(a);
	}
}

2-18(循环结构)累计器

请你实现一个累加器。输入n个非负整数,输出他们的和。 1<n<1000,而每个数则<10000。

输入格式:

输入包括两行。 第一行:包括一个整数n,表示总共有n个数。 第二行:包含n个整数。

输出格式:

输出n个数的和

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int a = scanner.nextInt();
		int[] arr = new int[1000];
		
		for (int i = 0 ; i < a ; i++) {
			arr[i]=scanner.nextInt();
		}
		int sum=0;
		for(int i=0;i<a;i++) {
			sum+=arr[i];
		}
		System.out.printf("%d",sum);
	}
}

2-19(循环问题)兔子繁殖问题

已知有一对兔子,每个月可以生一对兔子,而小兔子一个月后又可以生一对小兔子(比如:2月份出生的小兔子4月份可以生育)。也就是说,兔子的对数为:第一个月1对,第二个月2对,第三个月3对,第四个月5对.....假设兔子的生育期为两年,且不死。那么问题来了,你能说出每个月的兔子数么?

输入格式:

输入一个数n,表示第n个月,1<=n<=24。

输出格式:

输出这个月兔子的数目

import java.util.Scanner;
public class main {
	public static void main(String[] args) {
		//n为月份(1-24
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt(); 
		
		//将1 2 月份的数据单独写出来
		int first=1 ,second=2,next=0;
		if(n==first) {
			System.out.println(first);
		}else if(n==second) {
			System.out.println(second);
		}else {
			//从3月份开始往后循环
			for(int i=3;i<=n;i++) {
				next=first+second;
				first=second;
				second=next;
			}	
		}
		System.out.println(next);
	}	
}

2-20(循环结构) 最大因子

输入一个整数n(假设n >= 2),显示其非本身的最大因数。

输入格式:

输入一个大于等于2的整数

输出格式:

输出除n以外的n的最大因数

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int i=n;

        for(i = n-1;i > 1; i--) {
            if(n%i == 0) {
                System.out.println(i);
                break;
            }
        }
        if(i == 1) {
            System.out.print(1);
        }
    }
}

2-21(循环结构) 编写程序求1000之内的所有完全数(小背)

若一个数恰好等于它的因子之和,则这个数称为“完全数”,所谓因子就是除本身之外能被它整除的数。例如6的因子有1,2,3,6=1+2+3,因此6是完全数。

输入格式:

输出格式:

输出所有完全数,两个数之间有一个空格间隔,最后一个数后面一个空格。

public class Main {
    public static void main(String[] args) {
        for (int i = 2; i <= 1000; i++) {
            int sum = 0;
            for (int j = 1; j <= i / 2; j++) {
                if (i % j == 0) {
                    sum += j;
                }
            }
            if (sum == i) {
                System.out.print(i + " ");
            }
        }
    }
}

2-22(循环结构) 输出所有的水仙花数

输出所有的水仙花数。所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153

public class Main {
    public static void main(String[] args) {
        int ge,shi,bai,i;
        int a,b,c=1;
        for( i =100;i<1000;i++){
            ge = i%10;
            a = i/10;
            shi = a%10;
            a = a/10;
            bai = a%10;
            c=ge*ge*ge+shi*shi*shi+bai*bai*bai;
            if(c==i){
                System.out.println(c);
            }
        }
    }
}

2-23(数组) 使用一维数组求平均值

本题目要求使用一维数组,存储5个整数,输出5个整数的平均值

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] arr=new int[5]; //定义长度为5的数组
        int sum=0;
        double b;
        for(int i =0;i<arr.length;i++){
            arr[i] = scanner.nextInt();
        }
        //遍历输出数组中的每个数
        for(int i =0 ;i<arr.length;i++){
            sum += arr[i];

        }
        b = sum/5;
        System.out.println(b);
    }
}
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] arr=new int[5]; //定义长度为5的数组
        
        int sum=0;
        double b=0;
        
        for(int i =0;i<arr.length;i++){
            arr[i] = scanner.nextInt();
            sum += arr[i];
            b = sum/5;
        }
        System.out.println(b);
    }
}

2-24(数组) 用foreach求数组之和

定义一个整型数组a, 数组长度通过键盘给出,使用foreach语句,求数组所有元素之和

***也可以不需要用foreach求和

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] arr =new int [n];
        int sum=0;
        for(int i=0;i<n;i++){
            arr[i]=scanner.nextInt();
            sum += arr[i];
        }
        System.out.println(sum);
    }
}

2-26(数组) 返回最小元素数组的下标集

输入10个整数,输出最小值的所有下标。

输入格式:

输入10个整数

输出格式:

输出所有最小值的下标,一个数据后面带一个空格

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int [] arr = new int[10];

        for(int i=0; i<10 ;i++){
            arr[i] = scanner.nextInt();
        }
        //找最小值
        int min=arr[0];
        for(int i=0; i<arr.length;i++){
            if(arr[i]<min){
                min = arr[i];
            }
        }

        //找到最小值的下标
        for(int i = 0;i<arr.length;i++){
            if(min==arr[i]){
                System.out.print(i+" ");
            }
        }

    }
}

***分三步走:①将输入的数转换为数组 ②找到数组的最小值 ③找到最小值对应的下标

2-27(数组) 评委打分

输入格式:

第一行有十个整数,表示十位同学的初始分。第二行一个整数n,表示有n道题竞赛。
接下去有n行,每行有一个数字x,x表示本次可以加分的选手序号(每次答对者得10分)。

输出格式:

10个同学最终的得分值,每两位同学之间有一个空格

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int arr[] = new int[10];

        //初始分数
        for(int i = 0;i<arr.length;i++){
            arr[i] = scanner.nextInt();
        }
        //题目数number
        int number= scanner.nextInt();

        //处理每个选手的得分情况
        for(int i = 0;i<number; i++){
            int player = scanner.nextInt();
            arr[player-1]+=10;
        }

        //逐行输出选手的得分情况  注意在数组最后一个元素时要控制后面没有空格的输出
        for(int i =0;i<10;i++){
            if(i==9){
                System.out.printf("%d",arr[i]);
            }else{
                System.out.printf(arr[i]+" ");
            }
        }
    }
}

2-28(数组)arr矩阵转置

从键盘输入矩阵的行数N,和一个N×N阶的矩阵,编程输出它的转置矩阵。

输入格式:

首行为矩阵的行数(列数)N;

然后是N行N列组成矩阵的数据。每行内数据之间用空格隔开。

输出格式:

矩阵格式输出,每行内非尾部的每个数据后跟一个空格,行尾数据后不加空格,为换行符

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        //输入矩阵的行数
        int N = scanner.nextInt();
        //输入N*N的矩阵
        int[][] arr = new int[N][N];
        for(int m=0;m<N;m++){
            for(int n=0;n<N;n++){
                arr[m][n] = scanner.nextInt();
            }
        }

        for(int m=0;m<N;m++){
            for(int n=0;n<N;n++){

                System.out.print(arr[n][m]);
                if (n < N - 1) {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值