作业一:随即月份
题目描述:
编写一个随机产生1和12之间整数的程序
思路:
使用
Math.random()
产生一个0到1的左闭右开区间的一个浮点数,乘以100后强制类型转换成int
,再模12,再 + 1就行
public class GetMonth {
public static void main(String[] args) {
int month = (int) (Math.random() * 100) % 12 + 1;
if(month == 1)System.out.println("January");
else if(month == 2)System.out.println("February");
else if(month == 3)System.out.println("March");
else if(month == 4)System.out.println("April");
else if(month == 5)System.out.println("May");
else if(month == 6)System.out.println("June");
else if(month == 7)System.out.println("July");
else if(month == 8)System.out.println("August");
else if(month == 9)System.out.println("September");
else if(month == 10)System.out.println("October");
else if(month == 11)System.out.println("November");
else if(month == 12)System.out.println("December");
}
}
作业2:彩票
问题描述:
随机产生一个3位数的彩票,用户输入一个三位数
- 如果输入的数字和彩票的数字相等,就获得10000奖金
- 如果输入的数字和彩票的数字出现的种类和数量相同,只是顺序不同,则获得3000奖金
- 如果用户输入的数至少有一个数字在彩票数字中出现过,则获得1000奖金
思路:
直接使用
if
和else
进行讨论即可除去第一种外剩下五种排列方式是属于第二种的,第三种就拿用户输入的三位数中的每一位和彩票的每一位进行比较即可
import java.util.Scanner;
public class Lottery {
public static void main(String[] args) {
int lottery = (int) (Math.random() * 1000);
int lotteryDigit1 = lottery / 100;
int lotteryDigit2 = (lottery / 10) % 10;
int lotteryDigit3 = lottery % 10;
Scanner input = new Scanner(System.in);
System.out.print("Enerr your lottery pick(three digits):");
int guss = input.nextInt();
int gussDigit1 = guss / 100;
int gussDigit2 = (guss / 10) % 10;
int gussDigit3 = guss % 10;
if(guss == lottery)
System.out.println("Exact match: you win $10000");
else if((gussDigit1 == lotteryDigit1 && gussDigit2 == lotteryDigit3 && gussDigit3 == lotteryDigit2)
||(gussDigit1 == lotteryDigit2 && gussDigit2 == lotteryDigit1 && gussDigit3 == lotteryDigit3)
||(gussDigit1 == lotteryDigit2 && gussDigit2 == lotteryDigit3 && gussDigit3 == lotteryDigit1)
||(gussDigit1 == lotteryDigit3 && gussDigit2 == lotteryDigit1 && gussDigit3 == lotteryDigit2)
||(gussDigit1 == lotteryDigit3 && gussDigit2 == lotteryDigit2 && gussDigit3 == lotteryDigit1))
System.out.println("Exact match: you win $3000");
else if(gussDigit1 == lotteryDigit1 || gussDigit1 == lotteryDigit2 || gussDigit1 == lotteryDigit3
|| gussDigit2 == lotteryDigit1 || gussDigit2 == lotteryDigit2 || gussDigit2 == lotteryDigit3
|| gussDigit3 == lotteryDigit1 || gussDigit3 == lotteryDigit2 || gussDigit3 == lotteryDigit3)
System.out.println("Exact match: you win $1000");
else System.out.println("Sorry, no match");
}
}
作业3:判断两个矩形的位置关系
题目描述:
先输入矩形一的中心点的x和y,再输入矩形一的长和宽
再输入矩形二的中心点的x和y,再输入矩形二的长和宽
判断矩形二是否在矩形一内部,或者二者是否相交
思路:
计算出矩形一的上下界和左右界,计算出矩形二的上下界和左右界
这里为了方便描述,我们用
l, r
来表示左右界,用a, b
来表示上下界如果矩形二在矩形一内部,则判断条件就是矩形二的左界在矩形一左右界之间,矩形二的右界也在矩形一的左右界之间,上下界也同理,:
l2 >= l1 && l2 <= r1
&&r2 >= l1 && r2 <= r1
&&a2 >= b1 && a2 <= a1
&&b2 >= b1 && b2 <= a1
对于重叠计算起来比较复杂,所以我们可以考虑计算不重叠的,剩下的就是重叠的了,不重叠的就很好算,就四种情况,如图:
只需要四种判断就行
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter r1's center x-, y-coordinates, width, and height: ");
double x1 = input.nextDouble();//第一个矩形的中心点的横坐标
double y1 = input.nextDouble();//第一个矩形的中心点的纵坐标
double width_first = input.nextDouble();//第一个矩形的长
double height_first = input.nextDouble();//第一个矩形的宽
double left_first = x1 - width_first / 2, right_first = x1 + width_first / 2;//第一个矩形的左边界、右边界
double lowerbound_first = y1 - height_first / 2, upperbound_first = y1 + height_first / 2;//第一个矩形的下界、上界
System.out.print("Enter r2's center x-, y-coordinates, width, and height: ");
double x2 = input.nextDouble();//第二个矩形的中心点的横坐标
double y2 = input.nextDouble();//第二个矩形的中心点的纵坐标
double width_second = input.nextDouble();//第二个矩形的长
double height_second = input.nextDouble();//第二个矩形的宽
double left_second = x2 - width_second / 2, right_second = x2 + width_second / 2;//第二个矩形的左边界、右边界
double lowerbound_second = y2 - height_second / 2, upperbound_second = y2 + height_second / 2;//第一个矩形的下界、上界
if((left_second >= left_first && left_second <= right_first)
&&(right_second >= left_first && right_second <= right_first)
&&(upperbound_second >= lowerbound_first && upperbound_second <= upperbound_first)
&&(lowerbound_second >= lowerbound_first && lowerbound_second <= upperbound_first)
)
System.out.println("r2 is inside r1");
else if(right_second < left_first
|| left_second > right_first
|| lowerbound_second > upperbound_first
|| upperbound_second < lowerbound_first
)
System.out.println("r2 does not overlap r1");
else System.out.println("r2 overlaps r1");
}
}