其他JAVA学习的内容见:目录
1-1.系统自动引入java.lang包中的所有类,因此不需要再显式地使用import语句引入该包的所有类。
T
1-2.java.lang包是Java的核心类库,它包含了运行Java程序必不可少的系统类
T
1-3.如果一个类的声明中没有使用extends关键字,这个类被系统默认为是继承Object类。
T
1-4.为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口。
T
1-5.一个类可以实现多个接口
T
使用继承,实现“剪刀石头布的游戏”。
小时候很喜欢玩一个游戏,“剪刀石头布”,可以是出拳的形式,或跳格子的形式。现在我们用计算机来玩这个游戏。
电脑用随机数产生剪刀石头布,游戏玩家用输入1,2,3的方式出拳。
游戏玩家输入1或2或3,分别 代表剪刀(1)石头(2)布(3)。
电脑胜出时,显示"Winner is computerPlayer."
游戏玩家胜出时,显示“Winner is personPlayer.”
平局时显示"A Draw."
函数接口定义:
根据主方法内容,实现三个类的定义,分别是是ComputerPlayer、PersonPlayer、Game类。
其中ComputerPlayer、PersonPlayer要继承Player类。
根据主方法中的用法,实现Game类。
裁判测试程序样例:
import java.util.Scanner;
class Player{
String name;
Player(String name){
this.name = name;
}
int show() {
//出拳方法
int show = ( int ) (Math.random() * 10 ) %3 +1;
return show ;
}
}
/* 请在这里填写答案 */
public class Main {
public static void main(String[] args) {
ComputerPlayer c = new ComputerPlayer ("computer");
PersonPlayer p = new PersonPlayer("player ") ;
Game g = new Game( c ,p );
g.start();
}
}
输入样例:
2
输出样例:
A Draw.
编译程序
class ComputerPlayer extends Player {
ComputerPlayer(String name) {
super(name);//子类的构造方法必须调用父类的构造方法,使用super关键字;使用super关键字的这行语句必须放在子类的第一行
}
}
class PersonPlayer extends Player{
PersonPlayer(String name) {
super(name);
}
int choice(){
Scanner scan=new Scanner(System.in);
int c=scan.nextInt();
return c;
}
}
class Game{
ComputerPlayer cp;
PersonPlayer pp;
public Game(ComputerPlayer cp, PersonPlayer pp) {
this.cp = cp;//切忌写成cp=cp
this.pp = pp;
}
//如果刚开始不习惯用this,可以用下面替代
//public Game(ComputerPlayer x, PersonPlayer y) {
// x = cp;//切忌写成cp=cp
// y = pp;
// }
void start(){
int c=cp.show(),p=pp.choice();
if (c==p)
System.out.print("A Draw.");
else if (c==1&&p==3)
System.out.print("Winner is computerPlayer.");
else if (p==1&&c==3)
System.out.print("Winner is personPlayer.");
else if (p<c)
System.out.print("Winner is computerPlayer.");
else System.out.print("Winner is personPlayer.");
}
}
小白学习了一些复利投资知识,想比较一下复利能多赚多少钱(所谓复利投资,是指每年投资的本金是上一年的本金加收益。而非复利投资是指每年投资金额不包含上一年的收益,即固定投资额)。假设他每年固定投资M元(整数),每年的年收益达到P(0
输入格式:
M P N
输出格式:
复利收入(含本金),非复利收入(含本金),复利比非复利收入多的部分(全部取整,四舍五入)
输入样例:
10000 0.2 3
输出样例:
17280 16000 1280
编译程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int m = in.nextInt();
double p = in.nextDouble();
int n = in.nextInt();
double a = 0.0, b = 0.0, c = 0.0;
b = m * p * n + m;
int i;
a = (double)m;
for(i = 0; i < n; i++)
{
a *= 1 + p;
}
c = a - b;
System.out.println(Math.round(a) + " " + Math.round(b) + " " + Math.round(c));
}
}
本题目要求读入一个大于1的整数,编程将其分解成若干个质因子(素数因子)积的形式。
输入格式:
大于1的整数一个。
输出格式:
将输入的正整数分解成若干个质因子积的形式,质因子的出现顺序按从小到大排列。如:30=222*5;如果整数本身为质数或素数,直接输出,如:13=13。
输入样例:
12480
输出样例:
12480=2*2*2*2*2*2*3*5*13
编译程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n = in.nextInt();
System.out.print(n+"=");
int i;
for(i = 2; i <= Math.sqrt(n); i++)
{
if(n % i == 0)
{
System.out.print(i+"*");
n /= i;
i--;
}
}
System.out.println(n);
}
}
学校进行成绩分级管理,取消分数制,改为成绩分级评定。具体办法是:小于60分为E类;60分至70分(不含70分)为D类;70分至80分(不含)为C类;80分至90分(不含)为B类;90分以上为A类。设计一个程序,对输入的成绩进行等价划分
输入格式:
输入一个整数表示成绩。
输出格式:
根据输入的成绩,输出对应的等级(大写字母)
输入样例:
在这里给出一组输入。例如:
72
输出样例:
在这里给出相应的输出。例如:
C
编译程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n = in.nextInt();
if(n < 60)
System.out.println("E");
else if(n >= 60 && n < 70)
System.out.println("D");
else if(n >= 70 && n < 80)
System.out.println("C");
else if(n >= 80 && n < 90)
System.out.println("B");
else if(n >= 90)
System.out.println("A");
}
}
输入三角形三条边,判断该三角形为什么类型的三角形。
输入格式:
在一行中输入三角形的三条边的值(实型数),可以用一个或多个空格或回车分隔,其中三条边的取值范围均为[1,200]。
输出格式:
(1)如果输入数据非法,则输出“Wrong Format”;
(2)如果输入数据合法,但三条边不能构成三角形,则输出“Not a triangle”;
(3)如果输入数据合法且能够成等边三角形,则输出“Equilateral triangle”;
(4)如果输入数据合法且能够成等腰直角三角形,则输出“Isosceles right-angled triangle”;
(5)如果输入数据合法且能够成等腰三角形,则输出“Isosceles triangle”;
(6)如果输入数据合法且能够成直角三角形,则输出“Right-angled triangle”;
(7)如果输入数据合法且能够成一般三角形,则输出“General triangle”。
输入样例1:
在这里给出一组输入。例如:
50 50 50.0
输出样例1:
在这里给出相应的输出。例如:
Equilateral triangle
输入样例2:
在这里给出一组输入。例如:
60.2 60.2 80.56
输出样例2:
在这里给出相应的输出。例如:
Isosceles triangle
输入样例3:
在这里给出一组输入。例如:
0.5 20.5 80
输出样例3:
在这里给出相应的输出。例如:
Wrong Format
编译程序
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
double a[] = new double[3];
int i;
for(i = 0; i < 3; i++){
a[i] = in.nextDouble();
}
for(i = 0; i < 3; i++){
if(a[i] < 1 || a[i] > 200){
System.out.println("Wrong Format");
return;
}
}
Arrays.sort(a);
/*小补充:
||当左边为真时,就不运行右边的表达式了
|当左边为真,还是会运算右边的表达式
&&当左边为假时,就不会运算右边的表达式
&当左边为假时,还是会运算右边的表达式*/
if(a[0] + a[1] > a[2]){
if(a[0] == a[1] && a[1] == a[2]){
System.out.println("Equilateral triangle");
}
else if(a[0] == a[1] && a[0] * a[0] + a[1] * a[1] - a[2] * a[2] < 0.000001)
System.out.println("Isosceles right-angled triangle");
else if(a[2] == a[1] || a[2] == a[0] || a[0] == a[1])
System.out.println("Isosceles triangle");
else if(a[0] * a[0] + a[1] * a[1] - a[2] * a[2] < 0.0000010)
System.out.println("Right-angled triangle");
else{
System.out.println("General triangle");
}
}
else
System.out.println("Not a triangle");
}
}
本题目要求输入一个正整数,按数字的相反顺序输出。
输入格式:
输入一个正整数。
输出格式:
按输入正整数的数字相反顺序输出一个数字。
输入样例:
5236
输出样例:
6325
编译程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n = in.nextInt();
int m;
while(n != 0){
m = n % 10;
n /= 10;
System.out.print(m);
}
}
}
全国中小学生Scratch作品大赛拉开了序幕。每个参赛选手可以通过网络直接上传作品。本次比赛人人可做评委。每个网络评委可以通过网络对每一件作品进行打分。评分系统也是请程序高手设计的,能自动去掉一个最高分和一个最低分,求出平均分。
输入格式:
输入数据包括两行: 第一行为n,表示n个评委,n>2。 第二行是n个评委的打分,分数之间有一个空格。打分是可以带有小数部分的。
输出格式:
输出平均分,结果保留两位小数。
输入样例:
6
10 9 8 7.9 9 9.5
输出样例:
8.88
编译程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
String n=scan.nextLine();
String s=scan.nextLine();
int len=s.length();
double sum=0,aver=0,maxn=-1,minn=0x3f3f3f3f;
int cnt=0;
int x=Integer.parseInt(n);
while(cnt<len) {
int flag=0;
for(int i=cnt;i<len;i++) {
if(s.charAt(i)==' ') {
flag=1;
String ss=s.substring(cnt,i);
double q=Double.parseDouble(ss);
if(q>maxn)
maxn=q;
if(q<minn)
minn=q;
sum+=q;
cnt=i+1;
break;
}
}
if(flag==0){
String ss=s.substring(cnt,len);
Double q=Double.parseDouble(ss);
if(q>maxn)
maxn=q;
if(q<minn)
minn=q;
sum+=q;
break;
}
}
aver=(sum-minn-maxn)/(x-2);
System.out.printf("%.2f\n",aver);
}
}
这里常见问题是,一个个输入数,会超时,因此将他们读成字符串,然后提取有效数据
具体详解:作品评分
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
in.nextLine();
double sum = 0;
String[] line = in.nextLine().split(" ");//split方法是String类的重要方法
for(String str : line)
{
sum = sum + Double.parseDouble(str);//包装类把String类型转换为double类型
}
System.out.println(String.format("%.2f", sum/n));
}
中国人非常喜欢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.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n = in.nextInt();
int[] a = {
0, 6, 66, 666, 6666, 66666, 666666,6666666, 66666666, 666666666};
int i, sum = 0;
for(i = 0; i <= n; i++)
sum += a[i];
System.out.println(sum);
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int input = in.nextInt();
if(input == 0)
System.out.println(0);
else
System.out.println(sum_66(input));
}
public static int sum_66(int n){
if(n == 1)
return 6;
else
return sum_66(n-1)+sum_pow(n);
}
public static int sum_pow(int n){
int sum = 0;
for(int i = 0; i < n; i++)
sum = sum + (int)Math.pow(10, i) * 6;
return sum;
}
}