#Java學習#習題三

判斷題

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 nameint ageboolean genderint 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(); 
     }
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章