R7-1 计算正五边形的面积和周长 (10 分)
从键盘输入一个数作为正五边形的边长,计算并输出该正五边形的周长和面积。
计算正五边形的面积公式为: S=a
2
×√
25+10×√
5
/4
输入格式:
输入正五边形的边长。例如:
5
输出格式:
输出正五边形的面积和周长。第一行输出面积,第二行输出周长。例如:
43.0119
25
输入样例:
16.8
输出样例:
485.5875
84
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
double a=in.nextDouble();
System.out.printf("%.4f",a*a*Math.sqrt(25+10*Math.sqrt(5))/4);
System.out.println();
DecimalFormat d=new DecimalFormat("#.####");
System.out.println(d.format(a*5));
}
}
R7-1 创建一个倒数计数线程 (10 分)
创建一个倒数计数线程。要求:1.该线程使用实现Runnable接口的写法;2.程序该线程每隔0.5秒打印输出一次倒数数值(数值为上一次数值减1)。
输入格式:
N(键盘输入一个整数)
输出格式:
每隔0.5秒打印输出一次剩余数
输入样例:
6
输出样例:
在这里给出相应的输出。例如:
6
5
4
3
2
1
0
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
CountDown c = new CountDown();
Thread t = new Thread(c);
t.start();
}
}
class CountDown implements Runnable{
public void run()
{
Scanner reader = new Scanner(System.in);
int n=reader.nextInt();
for(;n>=0;n--)
{
System.out.println(n);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
R7-2 程序改错题4 (10 分)
程序改错题。请修改下列代码,使程序能够输出正确的结果。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Thread t = new Thread(new RunHandler());
t.run();
}
}
class RunHandler {
public void run() {
Scanner in = new Scanner(System.in);
int x = in.nextInt();
System.out.println(“run”);
}
}
输入格式:
输入一个整数x。
输出格式:
输出x行,每行一个字符串“run”。
输入样例:
4
输出样例:
run
run
run
run
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Thread t = new Thread(new RunHandler());
t.start();
}
}
class RunHandler implements Runnable {
public void run() {
Scanner in = new Scanner(System.in);
int x = in.nextInt();
for(int i=0;i<x;i++) {
System.out.println("run");
}
}
}
R7-2 单词替换 (10 分)
设计一个对字符串中的单词查找替换方法,实现对英文字符串中所有待替换单词的查找与替换。
输入格式:
首行输入母字符串,第二行输入查询的单词,第三行输入替换后的单词。
输出格式:
完成查找替换后的完整字符串
输入样例:
在这里给出一组输入。例如:
Although I am without you, I will always be ou you
ou
with
输出样例:
在这里给出相应的输出。例如:
Although I am without you, I will always be with you
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String statement;
Scanner sc =new Scanner(System.in);
statement=sc.nextLine();
String word1=sc.next();
String word2=sc.next();//用word2替换word1
String words[]=statement.split(" ");
/* for(int i=0;i<words.length;i++)
System.out.print(words[i]+"\t");*/
for(int i=0;i<words.length;i++) {//将句子分割成单词
if(word1.equals(words[i])) {
words[i]=word2;
}
}
StringBuffer stb=new StringBuffer();
String sta=null;
for(int i=0;i<words.length;i++) {//数组转换为句子
if(i==words.length-1)stb.append(words[i]);
else stb.append(words[i]+" ");
}
sta=stb.toString();
System.out.println(sta);
sc.close();
}
}
R7-3 图书价格汇总 (10 分)
图书价格汇总
输入格式:
假设某图书馆中图书记录的格式为“Java程序设计: 34;Web程序设计: 56;JSP程序设计:20”(每本书的价格是整数,每本书的价格与下一本书的名字之间有一个中文;)。
输出格式:
编写一个类的方法,能够接受键盘录入的符合上述格式的图书内容字符串,输出图书记录中所有书目的总价格。
输入样例:
Java程序设计:34 ;Web程序设计: 56;JSP程序设计:20
输出样例:
Java程序设计:34
Web程序设计: 56
JSP程序设计:20
总价格为110
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
String bookInfo[]=str.split(";");
Main main=new Main();
int sum=0;
for(int i=0;i<bookInfo.length;i++) //输出分割后的书本信息
System.out.println(bookInfo[i]);
for(int i=0;i<bookInfo.length;i++) {
String bn= (bookInfo[i].split(":"))[0];//以:分割
Integer pr=Integer.parseInt((bookInfo[i].split(":"))[1].trim());
sum+=pr.intValue();
}
System.out.println("总价格为"+sum);
}
}
R7-4 通过键盘输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 (10 分)
统计一行字符串中的英文字母个数、空格个数、数字个数、其他字符个数
输入格式:
通过键盘输入一行字符(任意字符)
输出格式:
统计一行字符串中的中英文字母个数、空格个数、数字个数、其他字符个数
输入样例:
rwrwewre2345asdJSJQI%^&(& *&sdf YY( 2342-k’
输出样例:
字母个数:22
数字个数:8
空格个数:5
其他字符个数:10
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
sc.close();
char[] chars = str.toCharArray();
int letter=0,num=0,blank=0,other=0;
for(int i=0;i<chars.length;i++) {
if((chars[i]>='A' && chars[i]<='Z') || (chars[i]>='a' && chars[i]<='z')){
letter++;
}else if(chars[i]>=47 && chars[i]<=57) {
num++;
}else if(chars[i]==32) {
blank++;
}else {
other++;
}
}
System.out.println("字母个数:"+letter);
System.out.println("数字个数:"+num);
System.out.println("空格个数:"+blank);
System.out.println("其他字符个数:"+other);
}
}
R7-5 数组元素交换 (10 分)
数组元素交换,要求:(1)最大的元素与第一个元素交换(2)最小的元素与最后一个元素交换。
输入格式:
输入一行字符串(由不同的整数组成,以空格分开)
输出格式:
首先以数组形式输出初始字符串(一行一个数字),然后以数组形式输出完成交换后的字符串(一行一个数字)。
输入样例:
2 9 0 10
输出样例:
2
9
0
10
10
9
2
0
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//获取用户的输入,并解析为一个数组
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
//分割用户输入得到一个字符串数组
String[] strs = str.split("\\s+");
// 遍历这个字符串数组,将每个字符串解析为一个Integer,并装到Integer数组中
int[] nums = new int[strs.length];
try {
for (int i = 0; i < strs.length; i++) {
nums[i] = Integer.parseInt(strs[i]);
}
}catch (NumberFormatException e){
//System.out.println("你输入有误,请输入数字,其它字符不支持");
}
int[] numStart = (int[])Arrays.copyOf(nums,nums.length);
int max_index = 0;
int min_index = 0;
int max =nums[0];
int min =nums[0];
int bottle=0;
// 遍历数组,获取最大数和最小数对应的index值
for (int i = 0; i < nums.length; i++) {
if(max<nums[i]){
max_index=i;
max = nums[i];
}
if(min>nums[i]){
min_index=i;
min=nums[i];
}
}
// 捣鼓瓶子,倒来倒去
bottle=nums[0];
nums[0]=nums[max_index];
nums[max_index]=bottle;
bottle=nums[nums.length-1];
nums[nums.length-1]=nums[min_index];
nums[min_index]=bottle;
// 打印结果
for(int i=0;i<nums.length;i++) {
System.out.println(numStart[i]);
}
for(int i=0;i<nums.length;i++) {
System.out.println(nums[i]);
}
}
}
R7-6 判断登录信息–Java字符串比较 (10 分)
从键盘接收用户输入的两个字符串,第一个代表用户名,第二个代表密码。
(1)如果用户名是SwpuIot,并且密码是123456,则输出:Welcome
(2)如果用户名正确,密码不正确,输出:Mismatch
(3)其他情况下,输出:NotExist
要输出的信息,建议从题目中复制,确保精确匹配。
输入格式:
用空格分隔开的两个字符串。
输出格式:
首字母大写的一个单词或词组。
输入样例:
SwpuIot 123456
输出样例:
Welcome
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String str = "SwpuIot 123456";
String[] strs = str.split(" ");
Scanner sc = new Scanner(System.in);
String s1 = sc.next();
String s2 = sc.next();
sc.close();
if(strs[0].equals(s1) && strs[1].equals(s2)) {
System.out.println("Welcome");
}else if(strs[0].equals(s1) && !strs[1].equals(s2)) {
System.out.println("Mismatch");
}else {
System.out.println("NotExist");
}
}
}
R7-7 伪随机数 (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) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
List<Integer> ss = new ArrayList<Integer>();
//Set<Integer> ss = new HashSet<Integer>();
Random rand = new Random(k);
for(int i = 0;i < n;i++)
{
ss.add(rand.nextInt(m));
if(i==n-1)
System.out.println(ss.get(i));
}
}
}
R7-1 jmu-Java-06异常-01-常见异常 (10 分)
自己编码以产生常见异常。
###main方法:
事先定义好一个大小为5的数组。
根据屏幕输入产生相应异常
提示:可以使用System.out.println(e)打印异常对象的信息,其中e为捕获到的异常对象。
**输入说明: **
arr 代表产生访问数组是产生的异常。然后输入下标,如果抛出ArrayIndexOutOfBoundsException异常则显示,如果不抛出异常则不显示。
null,产生NullPointerException
cast,尝试将String对象强制转化为Integer对象,产生ClassCastException。
num,然后输入字符,转化为Integer,如果抛出NumberFormatException异常则显示。
其他,结束程序。
输入样例:
arr 4
null
cast
num 8
arr 7
num a
other
输出样例:
java.lang.NullPointerException
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
java.lang.ArrayIndexOutOfBoundsException: 7
java.lang.NumberFormatException: For input string: “a”
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int []arr = new int [5];
Scanner input = new Scanner(System.in);
while (input.hasNext()){
String a = input.next();
if (a.equals("arr")){
int b = input.nextInt();
try {
int d = arr[b];
}catch (Exception e){
System.out.println(e.toString());
}
}else if (a.equals("num")){
String b = input.next();
try{
int d = Integer.parseInt(b);
}catch (Exception e){
System.out.println(e.toString());
}
}else if (a.equals("cast")){
try {
Object str = new String("cc");
System.out.println((Integer)(str));
}catch (Exception e){
System.out.println(e.toString());
}
}else if (a.equals("null")){
try {
String t = null;
int l = t.length();
}catch (Exception e){
System.out.println(e.toString());
}
}else {
System.exit(0);
}
}
}
}
R7-2 jmu-Java-06异常-02-使用异常机制处理异常输入 (10 分)
使用异常处理输入机制,让程序变得更健壮。
###main方法:
输入n,创建大小为n的int数组。
输入n个整数,放入数组。输入时,有可能输入的是非整型字符串,这时候需要输出异常信息,然后重新输入。
使用Arrays.toString输出数组中的内容。
输入样例:
5
1
2
a
b
4
5
3
输出样例:
java.lang.NumberFormatException: For input string: “a”
java.lang.NumberFormatException: For input string: “b”
[1, 2, 4, 5, 3]
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n=scan.nextInt();
int a[]=new int[n];
int count=0;
while(count<n) {
try {
String temp=scan.next();
int i=Integer.parseInt(temp);
a[count++]=i;
}catch(Exception e) {
System.out.println(e);
}
}
System.out.println(Arrays.toString(a));
scan.close();
}
}
R7-3 天不假年 (10 分)
程序填空题。根据题目要求完善下面的代码。请提交完整代码。 “今年50,明年18”是一个美好的愿望。人的年龄只能不断增长。 Person类的setAge方法用于更新年龄。 如果新的年龄比原来的年龄小,则输出B表示发现异常,否则输出A表示正常。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int age;
age = in.nextInt();
Person p = new Person(age);
age = in.nextInt();
try{
p.setAge(age);
}catch(AgeException e){
}
}
}
class Person{
int age;
public Person(int age){
this.age = age;
}
public void setAge(int age) throws AgeException {
if(this.age <=age){
this.age = age;
}else{
throw new AgeException();
}
}
}
class AgeException extends Exception{
}
输入格式:
输入在一行中给出2个绝对值不超过100的正整数A和B。
输出格式:
在一行中输出一个字符A或者B。
输入样例:
50 18
输出样例:
B
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int age;
age = in.nextInt();
Person p = new Person(age);
age = in.nextInt();
try{
p.setAge(age);
System.out.println("A");
}catch(AgeException e){
System.out.println("B");
}
}
}
class Person{
int age;
public Person(int age){
this.age = age;
}
public void setAge(int age) throws AgeException {
if(this.age <=age){
this.age = age;
}else{
throw new AgeException();
}
}
}
class AgeException extends Exception{
}
R7-4 成绩录入时的及格与不及格人数统计 (10 分)
编写一个程序进行一个班某门课程成绩的录入,能够控制录入成绩总人数,对录入成绩统计其及格人数和不及格人数。设计一个异常类,当输入的成绩小0分或大于100分时,抛出该异常类对象,程序将捕捉这个异常对象,并调用执行该异常类对象的toString()方法,该方法获取当前无效分数值,并返回一个此分数无效的字符串。
输入格式:
从键盘中输入学生人数n
从键盘中输入第1个学生的成绩
从键盘中输入第2个学生的成绩
…
从键盘中输入第n个学生的成绩
(注:当输入的成绩无效时(即分数为小于0或大于100)可重新输入,且输出端会输出此分数无效的提醒。)
输出格式:
显示及格总人数
显示不及格总人数
输入样例:
在这里给出一组输入。例如:
3
100
30
60
输出样例:
在这里给出相应的输出。例如:
2
1
输入样例:
在这里给出一组输入。例如:
2
200
69
30
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int count=sc.nextInt();
int pass=0;
for (int i=0;i<count;i++){
int grade=sc.nextInt();
if (grade<0||grade>100){
System.out.println(grade+"invalid!");
}else if (grade>=60){
pass++;
}
}
System.out.println(pass);
System.out.println(count-pass);
}
}
R7-2 jmu-Java-01入门-取数字浮点数 (10 分)
本题目要求读入若干以回车结束的字符串表示的整数或者浮点数,然后将每个数中的所有数字全部加总求和。
输入格式:
每行一个整数或者浮点数。保证在浮点数范围内。
输出格式:
整数或者浮点数中的数字之和。题目保证和在整型范围内。
输入样例:
-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 (true) {
String s = sc.nextLine();
char[] ch = s.toCharArray();
int sum = 0;
for (int i = 0; i < ch.length; i++) {
if (ch[i] == '-'|| ch[i] == '.') {
} else {
//将字符char类型转换成int类型
int temp = Integer.parseInt(String.valueOf(ch[i]));
sum += temp;
}
}
System.out.println(sum);
}
}
}
R7-8 求矩阵主对角线元素的和 (10 分)
编写一个程序,求n x n的double类型矩阵中主对角线上所有数字的和。
输入格式:
第一行输入矩阵的阶数n(0<=n<=10)。 第二行输入矩阵的n x n个double类型的数值。
输出格式:
输出n x n的double类型矩阵中对角线上所有数字的和(double型数值)。
输入样例:
4
1 2 3 4 5 6.5 7 8 9 10 11 12 13 14 15 16
输出样例:
34.5
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
double[][]d=new double[n][n];
double sum=0;
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
d[i][j]=cin.nextDouble();
if(i==j)
{
sum+=d[i][j];
}
}
}
System.out.println(sum);
}
}