Java1&Java2

本博客精选了一系列Java编程挑战题目,涵盖了程序改错、输入输出处理、数学计算、字符串操作、数组处理等核心内容,旨在提升Java编程技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7-1 程序改错题1 (5分)

程序改错题。以下代码目标是实现从键盘输入1个整数x,然后根据x的值做不同的计算,输出结果。(程序有错,请改正后提交)

import java.util.Scanner;
public class Main {
	public static void main(String args[]) {
		Scanner in = new Scanner(System.in);
		int x, j = 1;
		x = in.nextInt();
		switch (x) {
		case 1:
			j++;
		case 2:
			j++;
		case 3:
			j = x*j++;
		case 4:
			j= x + j++;
		case 5:
			j = x - j++;
		default:
			j = x;
		}
		System.out.println(j);
	}
}

输入格式:
输入整数x。
输出格式:
输出值。
输入样例:
5
输出样例:
4

import java.util.Scanner;
public class Main {
	public static void main(String args[]) {
		Scanner in = new Scanner(System.in);
		int x, j = 1;
		x = in.nextInt();
		switch (x) {
		case 1:
			j++;
            break;
		case 2:
			j++;
            break;
		case 3:
			j = x*j++;
            break;
		case 4:
			j= x + j++;
            break;
		case 5:
			j = x - j++;
            break;
		default:
			j=x;
        }
		System.out.println(j);
	}
}

7-2 jmu-java-01入门-基本输入 (10分)

对输入的若干行(每行以空格或者多个空格)数字字符串求和并输出。
输入格式:
每行包含两个数字字符串,中间以一个或者多个空格分隔。
输出格式:
输出两个数的和
输入样例:
1 1
2 3
-100 100
-100 -100
10 0

输出样例:
在这里给出相应的输出。例如:
2
5
0
-200
10

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext()) {
			int a=scanner.nextInt();
			int b=scanner.nextInt();
			System.out.println(a+b);
		}
	}
}

7-3 写一个程序,输出你的姓名、年龄、所在学院、所在专业、所在班级。 (20分 )

写一个程序,输出你的姓名、年龄、所在学院、所在专业、所在班级。
输出样例:
姓名:张三
年龄:20
所在学院:计算机学院
所在专业:计算机科学与技术
所在班级:1班

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//System.out.println("name");
		if(sc.hasNextLine()) {
			//System.out.println("name");
			String name=sc.next();
			//System.out.println("age");
			int age=sc.nextInt();
			//System.out.println("compus");
			String compus=sc.next();
			//System.out.println("object");
			String object=sc.next();
			//System.out.println("class");
			int classroom=sc.nextInt();
			System.out.println("姓名:"+name+"\n" + 
					"年龄:"+age+"\n" + 
					"所在学院:"+compus+"\n" + 
					"所在专业:"+object+"\n"+ 
					"所在班级:"+ classroom+"班" );
		
		}else {
			System.out.println("姓名:张三\n" + 
					"年龄:20\n" + 
					"所在学院:计算机学院\n" + 
					"所在专业:计算机科学与技术\n" + 
					"所在班级:1班" );
			
		}
		
	}
}

7-4 jmu-Java-02基本语法-05-浮点数的精确计算 (1分)

输入若干对浮点数,对每对浮点数输出其精确的和与乘积。
以下输入样例为两对浮点数输入,实际上有可能有不定对数的浮点数需要输入计算。
注1:直接使用double类型数据进行运算,无法得到精确值。
注2:输出时直接调用BigDecimal的toString方法。
输入样例:
69.1 0.02
1.99 2.01
输出样例:
69.12
1.382
4.00
3.9999

import java.math.BigDecimal;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        BigDecimal a,b;
        while (scanner.hasNext()){
            a = scanner.nextBigDecimal();
            b = scanner.nextBigDecimal();
            System.out.println(a.add(b));
            System.out.println(a.multiply(b));
        }
    }
}

7-5 十进制转十六进制 (15分)

编写一个程序,提示用户输入0~15之间的一个整数,显示其对应的十六进制数。
输入格式:
输入一个0~15之间的整数。
输出格式:
若输入的整数在0~15范围内,则输出对应的十六进制数。否则输出“Invalid input”。
输入样例:
11
输出样例:
B

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        char m = 'A';
        int n = scanner.nextInt();
        if(n > 15) {
            System.out.println("Invalid input");
        }else if (n >= 10 && n <= 16){
            System.out.println((char) (m+n-10));
        }else {
            System.out.println(n);
        }
    }
}

7-6 统计正数和负数的个数然后计算这些数的平均值 (15分)

编写程序,输入未指定个数的整数,判断读入的正数有多少个,读入的负数有多少个,然后计算这些输入值得总和及平均值(不对0计数)。当输入为0时,表明程序结束。将平均值以double型数据显示。
输入格式:
输入在一行中给出一系列整数,其间以空格分隔。当读到0时,表示输入结束,该数字不要处
输出格式:
在第一行中输出正整数的个数; 在第二行中输出负整数的个数; 在第三行中输出这些输入值的总和(不对0计数); 在第四行中输出这些输入值的平均值(double型数据)。
输入样例:
1 2 -1 3 0
输出样例:
3
1
5
1.25

import java.math.BigDecimal;
import java.util.Scanner;
/**
 * 统计正负数
 * @author Sakura
 *
 */
public class Main{
	public static void main(String[] args) {
		Scanner sc=new Scanner (System.in);
			int a=sc.nextInt();
			int positive=0;
			int negative=0;
			int sum=0;
			if(a==0) {
				return;
			}
			while(a!=0) {
				if(a>=0) {
					positive++;
				}else {
					negative++;
				}
				sum+=a;
				a=sc.nextInt();
			}
			System.out.println(positive);
			System.out.println(negative);
			System.out.println(sum);
			if(positive+negative==0) {
				System.out.println(sum*1.0);
			}else {
				System.out.println(sum*1.0/(positive+negative));
			}
	}
}

7-7 666 (10分)
中国人非常喜欢6这个数字,因为大家总爱说66大顺啊。数学狂人李某人喜欢把什么都数字化,于是她把顺利这个词也定义了数量级,6代表1级顺利,66代表2级顺利,666代表3级顺利,以此类推。你看,数学狂人的世界总是让人无法理解。今天,李某人决定将数学进行到底,现在她设前n级顺利的和是sn。
sn=6+66+666+…+66…66(n个6)。
假设你已经知道了数字n,那么,你能帮李某人求出sn么?
输入格式:
输入一个正整数n,n的范围是[0,10)。
输出格式:
输出Sn的值。
输入样例:
2
输出样例:
72

import java.math.BigDecimal;
import java.util.Scanner;
/**
 * 666
 * @author Sakura
 *
 */
public class Main{
	public static void main(String[] args) {
		Scanner sc=new Scanner (System.in);
			int n=sc.nextInt();
			int sum=0;
			int sum1=0;
			for(int i=1;i<=n;i++) {
				sum=sum*10+6;
				sum1=sum1+sum;
			}
			System.out.println(sum1);
			
		
	}
}

7-8 又来一个上三角数字三角形 (10分)
输入一个正整数n,输出具有n层的上三角数字三角形。
输入格式:
只有一个正整数n,1<=n<=100。
输出格式:
一个上三角数字三角形,每个数字占四个字符位置。
输入样例:
5
输出样例:
1 6 10 13 15
2 7 11 14
3 8 12
4 9
5

import java.util.Scanner; 
/**
 * 打印数字三角形
 * @author Sakura
 *
 */
public class Main {
    public static void main(String args[]) {
    	Scanner sc = new Scanner(System.in);
        int [][] a=new int [100][100];
        int n=sc.nextInt();
        int number=0;
        for(int i=0;i<n;i++){       //代表列数 
    		int j=0;
    		for(int k=0;k<n-i;k++){      //代表每列的个数 
    			a[j][i]=++number;
    			j++;                 //代表行数 
    		}
    		                           
    	} 
        //打印
        for(int i=0;i<n;i++){
   		 	for(int j=0;j<n;j++){
   		 			if(a[i][j]!=0){
   		 				System.out.printf("%4d",a[i][j]);
   		 			}	
   			}	
   		 	System.out.println();
   		
   		
   	}
        
        
    }
}

7-9 IP地址转换 (30分)

一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。
输入格式:
输入在一行中给出32位二进制字符串。
输出格式:
在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。
输入样例:
在这里给出一组输入。例如:
11001100100101000001010101110010
输出样例:
在这里给出相应的输出。例如:
204.148.21.114

import java.util.Scanner;
/**
 * IP地址转换
 * @author Sakura
 *
 */

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String c=sc.nextLine();
        char [] a = c.toCharArray();
        int l=0;
        for(int j=0;j<4;j++){
    		double temp=0,sum=0;
    		for(int k=7;k>=0;k--){
    			temp=(a[l]-'0')*Math.pow(2,k);
    			sum+=temp;
    			l++; 
    		}
    		System.out.print((int)sum);
    		if(j!=3)
    		System.out.print(".");
    	}
        
        
    }
}

7-10 369寝室 (10分)
369寝室是比较特殊的寝室,因为别的寝室都住了四个人,而369寝室只有三个人。也因为这个原因,寝室里的三位同学感情特别好。但是,毕业在即,三位小伙伴马上要分别。为了在未来的某个日子可以见面,三位小伙伴有了一个约定,假设在未来的某一年,三位小伙伴的年龄的末尾正好出现3、6、9三个数,那么他们会再次相聚。
现在问题来了,假设今年三位小伙伴的年龄分别是x,y,z,那么,他们三人最早几年后可以相聚呢?
输入格式:
输入数据包括三个整数x,y,z,分别表示三位伙伴的年龄。
输出格式:
如果小伙伴最早在n年后可以相见(不包括当前这一年),那么请输出这个n;如果100年内都不存在这样的情况,输出:so sad!
输入样例:
25 22 28
输出样例:
1

import java.math.BigDecimal;
import java.util.Scanner;
/**
 * 统计正负数
 * @author Sakura
 *
 */
public class Main{
	public static void main(String[] args) {
		Scanner sc=new Scanner (System.in);
			int a=sc.nextInt();
			int b=sc.nextInt();
			int c=sc.nextInt();
			int i;
			for( i=0;i<100;i++) {
				if((a%10==b%10)||(b%10==c%10)||(a%10==c%10)) {  //要保证三个人的年龄均不同
					System.out.println("so sad!");
					break;
				}else if((a%10==3||a%10==6||a%10==9)&&(b%10==3||b%10==6||b%10==9)&&(c%10==3||c%10==6||c%10==9)) {
                    if(i!=0){
                        System.out.println(i);
                        break;
                    }
					
				}
					a++;
					b++;
					c++;
					
				
			}
			if(i>=100) {
				System.out.println("so sad!");
			}
			
		
	}
}

7-1 使用公历类GregorianCalendar (10分)

使用公历类 GregorianCalendar,公历类 GregorianCalendar有方法setTimeInMillis(long);可以用它来设置从1970年1月1日算起的一个特定时间。请编程从键盘输入一个长整型的值,然后输出对应的年、月和日。例如输入:1234567898765,输出:2009-1-14
输入格式:
输入
1234567898765 (毫秒数)
输出格式:
输出
2009-1-14 (输出年、月和日,实际应该是2月,因为Java API 从0开始计算月份)
输入样例:
1450921070108
输出样例:
2015-11-24

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
public  class Main{
	public static void main(String args[]) {
		Scanner sc=new Scanner(System.in);
		Calendar c=new GregorianCalendar();
		long s=sc.nextLong();
		c.setTimeInMillis(s);
		System.out.println(c.get(Calendar.YEAR)+"-"+c.get(Calendar.MONTH)+'-'+c.get(Calendar.DATE));
	
	}
	
}

7-2 jmu-Java-01入门-取数字浮点数 (2分)

本题目要求读入若干以回车结束的字符串表示的整数或者浮点数,然后将每个数中的所有数字全部加总求和。
输入格式:
每行一个整数或者浮点数。保证在浮点数范围内。
输出格式:
整数或者浮点数中的数字之和。题目保证和在整型范围内。
输入样例:
-123.01
234
输出样例:
7
9

import java.util.Scanner;
public class Main{
	public static void main(String args[]) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
			int sum=0;
			String str=sc.nextLine();
			for(int i=0;i<str.length();i++) {
				if(str.charAt(i)>='0'&&str.charAt(i)<='9') {
					sum+=str.charAt(i)-'0';
				}
			}
			System.out.println(sum);
		}
	}
}

7-3 jmu-Java-02基本语法-03-身份证排序 (4分)

  1. 输入n,然后连续输入n个身份证号。
  2. 然后根据输入的是sort1还是sort2,执行不同的功能。输入的不是sort1或sort2,则输出exit并退出。
    输入sort1,将每个身份证的年月日抽取出来,按年-月-日格式组装,然后对组装后的年-月-日升序输出。
    输入sort2,将所有身份证按照里面的年月日升序输出。
    注意:处理输入的时候,全部使用Scanner的nextLine()方法,以免出错。
    输入样例:
    6
    410425198309308225
    320203197206115011
    431227196108033146
    330226196605054190
    34080019810819327X
    320111197112301539
    sort1
    sort2
    e
    输出样例:
    1961-08-03
    1966-05-05
    1971-12-30
    1972-06-11
    1981-08-19
    1983-09-30
    431227196108033146
    330226196605054190
    320111197112301539
    320203197206115011
    34080019810819327X
    410425198309308225
    exit
import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String id[] = new String[n];
		String birth[] = new String[n];
		sc.nextLine();
		for(int i = 0; i < n; i ++)
			id[i] = sc.nextLine();
		
		String t = sc.nextLine();
		
		while(true)
		{
			if(t.equals("sort1"))
			{
				for(int i = 0; i < n; i ++)
					birth[i] = id[i].substring(6, 10) + "-" + id[i].substring(10, 12) + "-" + id[i].substring(12, 14);
				Arrays.sort(birth);
				for(int i = 0; i < n; i ++)
					System.out.println(birth[i].toString());
			}else if(t.equals("sort2")) {
					for(int i = 0; i < n; i ++)
						birth[i] = id[i].substring(6, 14);
                        Arrays.sort(birth);
					for(int i = 0; i < n; i ++)
						for(int j = 0; j < n; j++)
							if(id[j].contains(birth[i]))	System.out.println(id[j].toString());
			}else if(t.equals("e")) {
				System.out.println("exit");
				sc.close();
				break;
			}
			t = sc.nextLine();
		}
		
	}

}

7-4 伪随机数 (10分)
在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,他可以产生随机整数、随机float、随机double,随机long。Random的对象有两种构建方式:带种子和不带种子。不带种子的方式将会返回随机的数字,每次运行结果不一样。无论程序运行多少次,带种子方式构建的Random对象会返回一样的结果。
请编写程序,使用第一种方式构建Random对象,并完成下面输入输出要求。
输入格式:
在一行中输入3个不超过10000的正整数n,m,k。
输出格式:
在一行中输出以k为种子建立的Random对象产生的第n个0到m-1之间的伪随机数。
输入样例:
10 100 1000
输出样例:
50

import java.util.*;
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();
		int m=sc.nextInt();
		int k=sc.nextInt();
		Random a=new Random(k);
		for(int i=0;i<n-1;i++) {
			a.nextInt(m);
			
		}
		System.out.println(a.nextInt(m));
	}	
}

7-5 jmu-Java-01入门-格式化输入输出与字符串 (15分)
本题主要考察
• 使用Scanner处理输入
• 使用System.out.printf进行格式化输出
• String常用方法与字符串常用操作
main
输入说明:
• 输入double,然后输入3个浮点数。输出:从左到右依次输出3个double(均保留2位小数输出,宽度为5),格式依次为:右侧填充空格,左侧填充空格,直接输出
• 输入int,然后输入3个整数(以1个或多个空格分隔)。输出:将3个整数相加后输出。
• 输入str,然后输入3个字符串。输出:去除空格,然后倒序输出3个字符。
• 输入line,然后输入一行字符串。输出:转换成大写后输出。
• 如果输入不是上面几个关键词,输出:输出other。
输出说明
choice=你输入选项
该选项对应的输出内容
提示

  1. 可使用line.split("\s+");将以1个或多个空格分隔开的字符串分割并放入字符串数组。
  2. Scanner.nextLine与Scanner的其他next函数混用有可能出错。
    输入样例:
    double
    1.578 3.0 3.14259
    line
    aaaaaaaaaa
    int
    1 2 3
    str
    321 654 987
    line
    dddddddddd
    end

输出样例:
choice=double
1.58 , 3.00,3.14
choice=line
AAAAAAAAAA
choice=int
6
choice=str
987654321
choice=line
DDDDDDDDDD
choice=end
other

import java.util.*;

public class Main {
	public static void main(String[] args) {
		String a;
		Scanner sc = new Scanner(System.in);
		while (true) {
			a = sc.nextLine();
			if (a.equals("double")) {
				double b1 = sc.nextDouble();
				double b2 = sc.nextDouble();
				double b3 = sc.nextDouble();
				System.out.printf("choice=%s\n", a);
				System.out.printf("%-5.2f,%5.2f,%.2f\n", b1, b2, b3);
				sc.nextLine();
			} else if (a.equals("int")) {
				int sum = 0;
				for (int i = 0; i < 3; i++)
					sum += sc.nextInt();
				System.out.printf("choice=%s\n", a);
				System.out.printf("%d\n", sum);
				sc.nextLine();
			} else if (a.equals("str")) {
				String str;
				str = sc.next();
				str = sc.next() + str;
				str = sc.next() + str;
				System.out.printf("choice=%s\n", a);
				System.out.println(str);
				sc.nextLine();
			} else if (a.equals("line")) {
				String str = sc.nextLine();
				str = str.toUpperCase();
				System.out.printf("choice=%s\n", a);
				System.out.println(str);
			} else {
				System.out.printf("choice=%s\n", a);
				System.out.println("other");
			}
		}
	}
}

7-6 校园竞赛-十位评委 (10分)
题目要求:
我们学院经常组织各项技能比赛,例如电脑文化节中Flash作品比赛,台下有10位评委来评判参赛者的作品,评委打分:0-100分的整数,参赛者最终得分是去掉一个最高分,去掉一个最低分,所剩分数的平均分。
要求设计一个软件,可以连续输入10位评委的成绩,并且可以无限次计算参赛者的成绩(提示,不退出即可继续输入下一批成绩)
输入格式:
90 100 80 70 65 86 77 89 91 73
输出格式:
100 65 82
输入样例:
在这里给出一组输入。例如:
90
100
80
70
65
86
77
89
91
73
输出样例:
在这里给出相应的输出。例如:
100 65
82

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while (true) {
			int [] a = new int[10];
			for(int i = 0;i<10;i++) {
				a[i]=in.nextInt();
			}
			m(a);
		}
	}
	public static void m(int[ ] a) {
		int max = a[0];
		int min = a[0];
		int sum = 0;
		for(int i = 0;i<10;i++) {
			if(a[i]>max) {
				max = a[i];
			}
			if(a[i]<min) {
				min = a[i];
			}
			sum+=a[i];
		}
		System.out.println(max+" "+min);
		System.out.println((sum-max-min)/8);
	}
}

7-7 通过键盘输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 (10分)
统计一行字符串中的英文字母个数、空格个数、数字个数、其他字符个数
输入格式:
通过键盘输入一行字符(任意字符)
输出格式:
统计一行字符串中的中英文字母个数、空格个数、数字个数、其他字符个数
输入样例:
rwrwewre2345asdJSJQI%^&(& *&sdf YY( 2342-k’
输出样例:
字母个数:22
数字个数:8
空格个数:5
其他字符个数:10

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str=sc.nextLine();
		int num=0,character=0,space=0,other=0;
		for(int i=0;i<str.length();i++) {
			if(str.charAt(i)>='0'&&str.charAt(i)<='9') {
				num++;
			}else if((str.charAt(i)>='A'&&str.charAt(i)<'Z')||(str.charAt(i)>='a'&&str.charAt(i)<='z')){
				character++;
			}else if(str.charAt(i)==' ') {
				space++;
			}else {
				other++;
			}
		}
		System.out.printf("字母个数:%d\n",character);
		System.out.printf("数字个数:%d\n",num);
		System.out.printf("空格个数:%d\n",space);
		System.out.printf("其他字符个数:%d\n",other);
		
		
			
	
	}
}

7-8 数组元素交换 (10分)
数组元素交换,要求:(1)最大的元素与第一个元素交换(2)最小的元素与最后一个元素交换。
输入格式:
输入一行字符串(由不同的整数组成,以空格分开)
输出格式:
首先以数组形式输出初始字符串(一行一个数字),然后以数组形式输出完成交换后的字符串(一行一个数字)。
输入样例:
2 9 0 10
输出样例:
2
9
0
10
10
9
2
0

import java.util.Scanner;


public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String s = in.nextLine();
		String [] st = s.split("\\s+");
		int[] a = new int[st.length];
		for(int i=0;i<st.length;i++) {
			a[i]=Integer.parseInt(st[i]);
		}
		int max=0;
		int min=0;
		int t;
		for(int i=0;i<a.length;i++) {
			System.out.println(a[i]);
		}
		for(int i=0;i<a.length;i++) {
			if(a[i]>a[max]) {
				max=i;
			}
			if(a[i]<a[min]) {
				min=i;
			}
		}
		t=a[0];
		a[0]=a[max];
		a[max]=t;
		t=a[a.length -1];
		a[a.length-1]=a[min];
		a[min]=t;
		for(int i=0;i<a.length;i++) {
			System.out.println(a[i]);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值