文章目錄
判斷題
1-1.用static修飾的變量是類變量。
T
1-2.如果一個成員變量被修飾爲final的,就是常量,常量必須賦給初值,而且不能再發生變化。
T
1-3.對於abstract類,不能創建該類的對象。
T
1-4.有的類定義時可以不定義構造函數,所以構造函數不是必需的。
F
1-5.一個Java類可以有多個父類。
F
1-6.package語句必須放到java程序的最開始。
T
1-7.一個類的非靜態方法可以訪問靜態成員變量。
T
1-8.一個類的靜態方法不可以訪問該類的非靜態成員變量。
T
1-9.構造函數名應與類名相同,返回類型爲void。
F
1-10.子類如果想使用父類的構造方法,必須在子類的構造方法中使用,並且必須使用關鍵字super來表示,而且super必須是子類構造方法中的頭一條語句
T
單選題
2-1.以下關於構造函數的描述錯誤的是( )
A.構造函數的返回類型只能是void型。
B.構造函數是類的一種特殊函數,它的方法名必須與類名相同。
C.構造函數的主要作用是完成對類的對象的初始化工作。
D.一般在創建新對象時,系統會自動調用構造函數。
A
2-2.下面哪個函數是public void aMethod(){…}的重載函數?( )
A.void aMethod( ){...}
B.public int aMethod(){...}
C.public void aMethod ( ){...}
D.public int aMethod ( int m){...}
D
2-3.下列方法頭中哪一個不與其他方法形成重載(overload)關係?( )
A.void mmm()
B.void mmm(int i)
C.void mmm(String s)
D.int mm()
D
2-4.在Java中用什麼關鍵字修飾的方法可以直接通過類名來調用?( )
A.static
B.final
C.private
D.void
A
2-5.下述哪條關於構造方法的說法,不符合Java語法的規定( )。
A.每個類至少有一個構造方法
B.構造方法必須與類同名
C.構造方法無返回值,其返回值類型必須寫爲void
D.構造方法可以是private的
C
2-6.一個*.java
文件中可以包含多少個public類?
A.最多1個
B.最少1個
C.只能是0個
D.不限制
A
2-7.訪問修飾符作用範圍由大到小是
A.private
-default
-protected
-public
B.public
-default
-protected
-private
C.private
-protected
-default
-public
D.public
-protected
-default
-private
D
2-8.編譯和運行下列程序會出現什麼樣的結果( )。
public class Ref {
public static void main(String[] args){
Ref r = new Ref();
r.amethod(r);
}
public void amethod(Ref r){
int i = 99;
multi(r);
System.out.println(i);
}
public void multi(Ref r){
r.i = r.i * 2;
}
}
A.編譯出錯
B.輸出:99
C.輸出:198
D.運行出錯
A
沒有無參構造函數
2-9.下列關於使用包中的類哪個說法是正確的。
A.類不可以使用其所在包中的private類
B.類可以使用其他包中的所有類
C.類可以使用其他包中的public類
D.以上說法都不正確
C
這裏其實AC都是對的,但A不嚴謹,類可以使用自身定義的private類。因此選C
函數題
寫出派生類構造方法(Java)
裁判測試程序樣例中展示的是一段定義基類People
、派生類Student
以及測試兩個類的相關Java代碼,其中缺失了部分代碼,請補充完整,以保證測試程序正常運行
函數接口定義:
根提示:
觀察類的定義和main方法中的測試代碼,補全缺失的代碼。
裁判測試程序樣例:
注意:真正的測試程序中使用的數據可能與樣例測試程序中不同,但僅按照樣例中的格式調用相關方法(函數)。
class People{
private String id;
private String name;
public People(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
}
class Student extends People{
private String sid;
private int score;
public Student(String id, String name, String sid, int score) {
/** 你提交的代碼將被嵌在這裏(替換此行) **/
}
public String toString(){
return ("(Name:" + this.getName()
+ "; id:" + this.getId()
+ "; sid:" + this.sid
+ "; score:" + this.score
+ ")");
}
}
public class Main {
public static void main(String[] args) {
Student zs = new Student("370202X", "Zhang San", "1052102", 96);
System.out.println(zs);
}
}
輸入樣例:
在這裏給出一組輸入。例如:
(無)
輸出樣例:
(Name:Zhang San; id:370202X; sid:1052102; score:96)
編譯程序
super(id, name);
this.sid = sid;
this.score = score;
根據派生類寫出基類(Java)
裁判測試程序樣例中展示的是一段定義基類People
、派生類Student
以及測試兩個類的相關Java代碼,其中缺失了部分代碼,請補充完整,以保證測試程序正常運行
函數接口定義:
提示:
觀察派生類代碼和main方法中的測試代碼,補全缺失的代碼。
裁判測試程序樣例:
注意:真正的測試程序中使用的數據可能與樣例測試程序中不同,但僅按照樣例中的格式調用相關方法(函數)。
class People{
protected String id;
protected String name;
/** 你提交的代碼將被嵌在這裏(替換此行) **/
}
class Student extends People{
protected String sid;
protected int score;
public Student() {
name = "Pintia Student";
}
public Student(String id, String name, String sid, int score) {
super(id, name);
this.sid = sid;
this.score = score;
}
public void say() {
System.out.println("I'm a student. My name is " + this.name + ".");
}
}
public class Main {
public static void main(String[] args) {
Student zs = new Student();
zs.setId("370211X");
zs.setName("Zhang San");
zs.say();
System.out.println(zs.getId() + " , " + zs.getName());
Student ls = new Student("330106","Li Si","20183001007",98);
ls.say();
System.out.println(ls.getId() + " : " + ls.getName());
People ww = new Student();
ww.setName("Wang Wu");
ww.say();
People zl = new People("370202", "Zhao Liu");
zl.say();
}
}
輸入樣例:
在這裏給出一組輸入。例如:
(無)
輸出樣例:
在這裏給出相應的輸出。例如:
I’m a student. My name is Zhang San.
370211X , Zhang San
I’m a student. My name is Li Si.
330106 : Li Si
I’m a student. My name is Wang Wu.
I’m a person! My name is Zhao Liu.
編譯程序
public People(){
}
public People(String id,String name){
this.id = id;
this.name = name;
}
public void setId(String id){
this.id = id;
}
public String getId(){
return this.id;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name ;
}
public void say(){
System.out.println("I'm a person! My name is " + this.name +".");
}
人口統計
本題運行時要求鍵盤輸入10個人員的信息(每一個人信息包括:姓名,性別,年齡,民族),要求同學實現一個函數,統計民族是“漢族”的人數
函數接口定義:
public static int numofHan(String data[])
其中 data[]
是傳入的參數。 data[]
中的每一個元素都是一個完整的人員信息字符串,該字符串由“姓名,性別,年齡,民族”,各項之間用英文半角的逗號分隔。函數須返回 值是漢族的人數。
裁判測試程序樣例:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
final int HUMANNUM=10;
String persons[]=new String[HUMANNUM];
Scanner in=new Scanner(System.in);
for(int i=0;i<persons.length;i++)
persons[i]=in.nextLine();
int result=numofHan(persons);
System.out.println(result);
}
/*在此處給出函數numofHan()*/
}
輸入樣例:
Tom_1,男,19,漢族
Tom_2,女,18,漢族
Tom_3,男,20,滿族
Tom_4,男,18,漢族
Tom_5,男,19,漢族人
Tom_6,女,17,漢族
Tom_7,男,19,蒙古族
漢族朋友_1,男,18,漢族
Tom_8,male,19,老外
Tom_9,female,20,漢族
輸出樣例:
7
編譯程序
public static int numofHan(String data[]){
String str = "漢族";
int num = 0;
for(String s: data){
if(s.indexOf(str) >= 0)
num++;
}
return num;
}
編程題
通過鍵盤輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數
統計一行字符串中的英文字母個數、空格個數、數字個數、其他字符個數
輸入格式:
通過鍵盤輸入一行字符(任意字符)
輸出格式:
統計一行字符串中的中英文字母個數、空格個數、數字個數、其他字符個數
輸入樣例:
rwrwewre2345asdJSJQI%^&(& *&sdf YY( 2342-k’
輸出樣例:
字母個數:22
數字個數:8
空格個數:5
其他字符個數:10
編譯程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
in.close();
char[] c = str.toCharArray();
int letter = 0,num = 0,blank = 0,other = 0;
int i;
for(i = 0; i < c.length; i++){
if((c[i] >= 'A' && c[i] <= 'Z') || (c[i] >= 'a' && c[i] <= 'z')){
letter++;
}
else if(c[i] >= '0' && c[i] <= '9'){
num++;
}
else if(c[i] == ' '){
blank++;
}
else{
other++;
}
}
System.out.println("字母個數:"+letter);
System.out.println("數字個數:"+num);
System.out.println("空格個數:"+blank);
System.out.println("其他字符個數:"+other);
}
}
數組元素交換
數組元素交換,要求:(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 sc = new Scanner(System.in);
String[] nums = null;
nums = sc.nextLine().split(" ");
int num[] = new int[nums.length];
int i;
for(i = 0;i < num.length; i++){
num[i]=Integer.valueOf(nums[i]);
System.out.println(num[i]);
}
int min = num[0], max = num[0], flagn = 0, flagx = 0;
for(i = 0; i < num.length; i++){
if(num[i] < min){
min = num[i];
flagn = i;
}
if(num[i] > max){
max = num[i];
flagx = i;
}
}
if(num[0] == min)
flagn = flagx;
int a = num[0];
num[0] = max;
num[flagx] = a;
if(num[num.length - 1] != min){
int b = num[num.length - 1];
num[num.length - 1] = min;
num[flagn] = b;
}
for(i = 0;i < num.length; i++){
System.out.println(num[i]);
}
}
}
集體評分
程序填空題。請補充以下代碼,完成題目要求。(注意:需要提交完整代碼) 有一個團隊由5個人組成。他們每個人給指導老師一個分數,去掉最高分,去掉最低分,剩下的3個分數的平均分就是該團隊對指導老師的評分。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] grade = new int[5];
for(int i=0; i<grade.length; i++){
grade[i] = in.nextInt();
}
RR rr = new RT(grade);
double dd = rr.mark();
System.out.printf("%.2f",dd);
}
}
abstract class RR{
int[] grade;
public RR(int[] grade){
this.grade = grade;
}
public abstract double mark();
}
class RT extends RR{
}
輸入格式:
在一行中給出5個不超過10的正整數(從小到大排列)
輸出格式:
輸出集體評分,保留小數點後兩位
輸入樣例:
1 2 4 6 9
輸出樣例:
4.00
編譯程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] grade = new int[5];
for(int i=0; i<grade.length; i++){
grade[i] = in.nextInt();
}
RR rr = new RT(grade);
double dd = rr.mark();
System.out.printf("%.2f",dd);
}
}
abstract class RR{
int[] grade;
public RR(int[] grade){
this.grade = grade;
}
public abstract double mark();
}
class RT extends RR{
public RT(int[] grade){
super(grade);
}
public double mark() {
double sum = 0;
int i;
for(i = 1; i < grade.length - 1; i++){
sum += grade[i];
}
return sum / 3;
}
}
jmu-Java-03面向對象基礎-01-構造函數與toString
定義一個有關人的Person
類,內含屬性:
String name
、int age
、boolean gender
、int id
,所有的變量必須爲私有(private
)。
注意:屬性順序請嚴格按照上述順序依次出現。
1.編寫無參構造函數
- 打印"This is constructor"。
- 將name,age,gender,id按照
name,age,gender,id
格式輸出
2.編寫有參構造函數
依次對name,age,gender
賦值。
3.覆蓋toString函數
按照格式:類名 [name=, age=, gender=, id=]
輸出。建議使用Eclipse自動生成.
4.對每個屬性生成setter/getter方法
**5.main方法中 **
- 首先從屏幕讀取n,代表要創建的對象個數。
- 然後輸入n行name age gender , 調用上面2編寫的有參構造函數新建對象。
- 然後將剛纔創建的所有對象
逆序
輸出。 - 接下來使用無參構造函數新建一個Person對象,並直接打印該對象。
輸入樣例:
3
a 11 false
b 12 true
c 10 false
輸出樣例:
Person [name=c, age=10, gender=false, id=0]
Person [name=b, age=12, gender=true, id=0]
Person [name=a, age=11, gender=false, id=0]
This is constructor
null,0,false,0
Person [name=null, age=0, gender=false, id=0]
編譯程序
import java.util.Scanner;
class Person{
private String name = null;
private int age = 0;
private boolean gender = false;
private int id = 0;
public Person() {
System.out.println("This is constructor");
System.out.println(name+","+age+","+gender+","+id);
System.out.println("Person [name="+name+", age="+age+", gender="+gender+", id="+id+"]");
}
public Person(String name, int age, boolean gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String toString() {
System.out.println("Person [name="+this.name+", age="+this.age+", gender="+this.gender+", id="+0+"]");
return name;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public boolean getGender(){
return gender;
}
public void setGender(boolean gender){
this.gender=gender;
}
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
}
public class Main{
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
Person[] per = new Person[n];
for(int i=0; i<per.length; i++) {
String name = reader.next();
int age = reader.nextInt();
boolean genter = reader.nextBoolean();
per[i] = new Person(name,age,genter);
}
for(int x=per.length-1; x>=0;x--){
per[x].toString();
}
per.toString();
Person person = new Person();
}
}