【JAVA作业】异常、随机数、List

第一题

分别编写名字为TestPackageCalss和MyException类,实现一下功能:在控制台串中输入一串字符,并判断,如果是整数字符串,则转换成Integer对象,如果是浮点数字符串则转换成Double对象,并格式化为 $#…#.##(不用四舍五入输出进度到小数点后面两位,),如果是非数字,则抛出显式抛出自定义异常类MyException,异常信息是“输入了数据无法实现数字格式转换";
MyException

//MyException
public class MyException extends Exception {

	public MyException(String ErrorMessage) {
		super(ErrorMessage);
	}

}

//TestPackageCalss
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Scanner;
import java.math.*;

public class TestPackageCalss {

	public static double check(String s) throws MyException {
		String regex="\\d+\\.{1}\\d*";
		if(s.matches(regex)) {
			return Double.parseDouble(s);
		}
		else {
			throw new MyException("输入了数据无法实现数字格式转换");
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		//用正则表达式进行判断	
		String regex="\\d+";
		while(true) {
			String s=sc.next();
			try {
				if(s.matches(regex)) {
					//创建整型对象
					System.out.println("整型");
					Integer I=Integer.valueOf(Integer.parseInt(s));
				}else {
					//这里要用到了check函数,之后才能catch Exception
					double d1=check(s);
					System.out.print("浮点型");
					Double I=Double.valueOf(Double.parseDouble(s));
					//格式化~WOW
					DecimalFormat d2=new DecimalFormat("#0.##");
					d2.setRoundingMode(RoundingMode.FLOOR);
					System.out.println(d2.format(d1));
				}
			}catch(MyException e) {
				System.out.println(e);
			}
			
		}
	}

}

  
 

第二题

编写一个类,该类有一个名字为 getRandomNum的方法 ,该方法可以返回若干个指定范围内的随机数。编写一个测试类,通过键盘输入 返回随机数的个数和范围,打印输出返回的随机数。
比如输入 10 20 ,则可以返回10个20以内的不同的随机数。(应用:比如以学号抽奖,不能重复中奖,每次抽出来数字一定属于某个同学的学号)

这里如果学号过大了,有两种解决方法

  1. 可以适当的减去某一特定的数,在输出的时候再加上。
  2. 如果真的真的very big,可以建立一个数组专门用来储存。
package TestPackageCalss;

import java.util.Scanner;

public class RandomNum {
	static int flag[]=new int [1000000];
	
	public static int getRandomNum(int head,int tail) {
		int s=(int) (head+(Math.random()*(tail-head)));
		return s;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int num=0;
		int head=sc.nextInt();
		int tail=sc.nextInt();
		while(num<=tail-head) {
			int n=getRandomNum(head, tail);
			if(flag[n]==0) {
				System.out.print(n+" ");
				flag[n]=1;
				num++;
			}
		}
	}
}

 
 

第三题

编写一个掷色子猜大小的游戏: 每个色子有六个面,分别代表 1 -6 点。每次产生三个色子,三个点数的和>=10 为大,否则为小。 程序启动时在控制台显示 用户当前的总分,然后提示用户输入 押注的 分数,用户按回车后提示用户猜大小,然后程序根据色子点数和用户输入的结果进行判断。每一次执行完后输出色子点数,用户的输赢和剩余的分数。当用户的输入的分数是负数或大于总分,提示用户用户输入有误,如果用户输入exit,则程序退出。程序还要保证如果用户输入的分数 >1000,并且机器赢得的分数少于用户的输入分数时,用户一定输。

package TestPackageCalss;

import java.util.Scanner;

public class _3 {
	public static int getRandomNum(int head,int tail) {
		int s=(int) (head+(Math.random()*(tail-head)));
		return s;
	}
	
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		//两人刚开始各有两千颗欢乐豆
		int sum=2000,robot=2000,flag=0;
		while(true) {
			flag=0;
			System.out.println("您当前总分为:"+sum);
			System.out.println("机器人当前总分为:"+robot);
			if(sum<robot) 
				System.out.println("很遗憾,您输了,如果您想继续玩游戏,请输入go,否则输入exit");
			else
				System.out.print("请输入您要押注的分数:");
			String score=sc.next();
			if(score.equals("exit"))
				System.exit(-1);
			if(score.equals("go")) {
				sum=0;
			}
			int intscore=Integer.parseInt(score);
			if(intscore<0||intscore>sum) {
				System.out.println("输入有误,请重新输入");
				continue;
			}
			
			//如果f是1则说明是小,2则说明是大
			int f=0;
			System.out.print("请输入您要押注的大小:BIG or SMALL");
			String size=sc.next();
			if(size.equals("BIG"))
				f=2;
			if(size.equals("SMALL")) {
				f=1;
			}
						
			//如果用户的押注的分数大于1000或者比机器人高,用户一定输
			if(sum>robot||intscore>1000)
				flag=1;
			System.out.println("色子点数分别为:");
			int a,b,c;
			while(true) {
				a=getRandomNum(1, 6);
				b=getRandomNum(1, 6);
				c=getRandomNum(1, 6);
				if((flag==1&&(a+b+c>=10)&&f==1)||(flag==1&&(a+b+c<10)&&f==2))
					break;
				else if(flag==0)
					break;
			}
			
			System.out.println(a+" "+b+" "+c);
			if(((a+b+c>=10)&&f==2)||((a+b+c<10)&&f==1))
				sum+=100;
			else
				robot+=100;
		}
		
	}
}

 
 

第四题

编写一个类TessArray,定义一个一维的整型数组,使用两种循环遍历数组。输出数组中最大值的元素。然后对数组排序,分别在数组头,中间和末尾 位置插入一个元素。

package TestPackageCalss;
import java.util.*;

public class TessArray {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<Integer> list=new ArrayList<Integer>();
		
		Scanner sc=new Scanner(System.in);
		System.out.print("请输入你要建立一个多大的数组:");
		int n=sc.nextInt();
		int arr[] =new int [n];
		for(int i=0;i<n;i++) {
			arr[i]=sc.nextInt();
		}
		int maxi=arr[0];
		for(int i=1;i<arr.length;i++) {
			maxi=Math.max(maxi, arr[i]);
		}
		System.out.println("最大数为:"+maxi);
		Arrays.sort(arr);
	
		
		//乖孩子做法
		System.out.print("请输入你要插入的元素:");
		int m=sc.nextInt();
		int newarr[]=new int[n+3];
	
		for(int i=0,j=0;j<newarr.length;j++) {
			if(j==0||j==newarr.length-1||j==newarr.length/2) {
				newarr[j]=m;
				continue;
			}
			newarr[j]=arr[i];
			i++;
		}
		for(int i=0;i<n+3;i++)
			System.out.print(newarr[i]+" ");
		
		
		//捣蛋孩子做法
		for(int i=0;i<n;i++)
			list.add(arr[i]);
		System.out.print("请输入你要插入的元素:");
		m=sc.nextInt();
		list.add((n+1)/2,m);
		list.add(0,m);
		list.add(n+2,m);
		
		System.out.println(list);
	}
}
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值