[編程題] Java基礎編程練習題(二)

點擊上方“Coder編程”,選擇“置頂公衆號”

技術文章第一時間送達!

Java基礎編程練習題(二)

1.編寫一個Java程序實現多線程,在線程中輸出線程的名字,隔300毫秒輸出一次,共輸出20次。

// programme name TestThread;
 // 聲明一個子線程類Threaddemo;
class ThreadDemo extends Thread {
  public ThreadDemo(String str) {
    super(str);
    }
public void run() {
    for(int i=0;i<20;i++){
        System.out.print(“  ”+this.getName());
    try {
     Sleep(300);
    }catch(InterruptedException e){
     System.out.println(e.getMessage());
     return;
    }
}
    System.out.println(“  /end”);
    }
}
public class TestThread {
 public static void main( String args[] ) {
   ThreadDemo thread1=new ThreadDemo(“T1”);
   ThreadDemo thread2=new ThreadDemo(“T2”);
   ThreadDemo thread3=new ThreadDemo(“T3”);
   thread1.start();
   thread2.start();
   thread3.start();
 }
}

2.編寫程序,在屏幕上顯示帶標題的窗口,並添加一個按鈕。當用戶單擊按鈕時,結束程序。(窗體編程)

// Programme Name ButtonEventDemo.java
import javax.swing.*;
import java.awt.event.*;
public class ButtonEventDemo extends JPanel implements ActionListener{
protected JButton b1;    //聲明一個按鈕對象
public ButtonEventDemo() {    //構造方法
        ImageIcon ButtonIcon = new ImageIcon("images/green.png");  //創建按鈕的圖標對象
        b1 = new JButton("退出按鈕", ButtonIcon);      //生成按鈕對象
        b1.setMnemonic(KeyEvent.VK_E);   //設置b1的助記符是Alt+E
        b1.setToolTipText("這是退出按鈕。");    // 設置按鈕提示條
        this.add(b1);   //往面板對象中加載按鈕
        b1.addActionListener(this);  //本類對象註冊爲按鈕的事件監聽器
     }
    public void actionPerformed(ActionEvent e){ //按鈕事件響應方法
    System.exit(0);   //按b1則退出主程序        
}
    private static void createGUI() { //創建窗體
        JFrame.setDefaultLookAndFeelDecorated(true); //設置java隱含觀感
        JFrame frame = new JFrame("按鈕測試"); //生成應用程序主窗體
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //設置關閉時隱含操作
        ButtonEventDemo CPane = new ButtonEventDemo();  //生成主類對象--面板
        CPane.setOpaque(true);    //面板要求不透明
        frame.setContentPane(CPane); //設置主類對象爲主窗體的內容面板
        frame.pack(); //主窗體緊縮顯示
        frame.setVisible(true);  //設置主窗體可見
    }
    public static void main(String[] args) {  //將createGUI()列入線程
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createGUI(); 
            }
        });
    }
}

3. 古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數爲多少?

//這是一個菲波拉契數列問題

public class Test {
    public static void main(String[] args) {
        System.out.println("第1個月的兔子對數:    1");
        System.out.println("第2個月的兔子對數:    1");
        int f1 = 1, f2 = 1, f, M = 24;    
        for (int i = 3; i <= M; i++) {     
            f = f2;     
            f2 = f1 + f2;     
            f1 = f;     
            System.out.println("第" + i + "個月的兔子對數: " + f2);        
        }
    }
}

4. 判斷101-200之間有多少個素數,並輸出所有素數。程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除, 則表明此數不是素數,反之是素數。

public class Test {
    public static void main(String[] args) {   
        int count = 0;   
        for (int i = 101; i < 200; i += 2) {    
            boolean b = false;    
            for (int j = 2; j <= Math.sqrt(i); j++)     {       
                if (i % j == 0) {
                    b = false;
                    break;
                }        
                else           {
                    b = true;
                }    
            }       
            if (b == true) {
                count++;
                System.out.println(i);
            }                                 
        }   
        System.out.println("素數個數是: " + count);
    }
}

5. 打印出所有的 "水仙花數 ",所謂 "水仙花數 "是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個 "水仙花數 ",因爲153=1的三次方+5的三次方+3的三次方。

public class Test {
    public static void main(String[] args) {    
        int b1, b2, b3;    
        for (int m = 101; m < 1000; m++) {     
            b3 = m / 100;     
            b2 = m % 100 / 10;     
            b1 = m %    10;     
            if ((b3 * b3 * b3 + b2 * b2 * b2 + b1 * b1 * b1) == m) {     
                System.out.println(m + "是一個水仙花數");
            }    
        }
    }
}

6. 將一個正整數分解質因數。例如:輸入90,打印出90=233*5。

程序分析:對n進行分解質因數,應先找到一個最小的質數k,然後按下述步驟完成:(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,打印出即可。(2)如果n <> k,但n能被k整除,則應打印出k的值,並用n除以k的商,作爲新的正整數你n,重複執行第一步。(3)如果n不能被k整除,則用k+1作爲k的值,重複執行第一步。

import java.util.*;
public  class Test {  
    public static void main(String[] args) {       
        Scanner s = new Scanner(System.in);       
        System.out.print("請鍵入一個正整數:     ");       
        int    n    = s.nextInt();       
        int k = 2;       
        System.out.print(n + "=");       
        while (k <= n) {         
            if (k == n) {
                System.out.println(n);
                break;
            }           
            else if (n % k == 0) {
                System.out.print(k + "*");
                n = n / k;
            }                   
            else    k++;                  
        }    
    }   
}

7. 利用條件運算符的嵌套來完成此題:學習成績> =90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。

import java.util.*;
public class Test {
    public static void main(String[] args) {

        int x;     
        char grade;     
        Scanner s = new Scanner(System.in);     
        System.out.print("請輸入一個成績: ");     
        x = s.nextInt();       
        grade = x >= 90 ? 'A' : x >= 60 ? 'B' : 'C';    
        System.out.println("等級爲:" + grade);   
    }
}

8. 輸入兩個正整數m和n,求其最大公約數和最小公倍數。

/**在循環中,只要除數不等於0,用較大數除以較小的數,將小的一個數作爲下一輪循環的大數,取得的餘數作爲下一輪循環的較小的數,
如此循環直到較小的數的值爲0,返回較大的數,此數即爲最大公約數,最小公倍數爲兩數之積除以最大公約數。*/
import java.util.*;
public class Test     {
    public static void main(String[] args) {
        int     a, b, m;
        Scanner s = new Scanner(System.in);
        System.out.print("鍵入一個整數: ");
        a = s.nextInt();
        System.out.print("再鍵入一個整數: ");
        b = s.nextInt();      
        deff cd = new deff();      
        m = cd.deff(a, b);      
        int n = a * b / m;      
        System.out.println("最大公約數: " + m);      
        System.out.println("最小公倍數: " + n);
    }
}

class deff {
    public int deff(int x, int y) {

        int t;     
        if (x < y) {

            t = x;      
            x = y;      
            y = t;     
        }      
        while (y != 0) {

            if (x == y) return x;      
            else {

                int k = x % y;       
                x = y;       
                y = k;      
            }    
        }    
        return x;
    }
}

9. 輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。

import java.util.*;
public class Test {
    public static void main(String[] args) {
        int abcCount = 0; //英文字母個數
        int spaceCount = 0; //空格鍵個數
        int numCount = 0; //數字個數
        int otherCount = 0; //其他字符個數
        Scanner scan = new Scanner(System.in);//掃描器接受控制檯的輸入信息
        System.out.println("輸入一組字符");
        String str = scan.nextLine(); //取出控制檯的一行信息,也就是你輸入的信息
        char[] ch = str.toCharArray();//把取道的字符串變成一個char數組
        for (int i = 0; i < ch.length; i++) {
            if (Character.isLetter(ch[i])) {
                //判斷是否字母
                abcCount++;
            } else if (Character.isDigit(ch[i])) {
                //判斷是否數字
                numCount++;
            } else if (Character.isSpaceChar(ch[i])) {
                //判斷是否空格鍵
                spaceCount++;
            } else {
                //以上都不是則認爲是其他字符
                otherCount++;
            }
        }
        System.out.println("字母個數:" + abcCount);
        System.out.println("數字個數:" + numCount);
        System.out.println("空格個數:" + spaceCount);
        System.out.println("其他字符個數:" + otherCount);
    }
}

10. 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。

import java.util.*;
public class Test {
    public static void main(String[] args) {

        long a, b = 0, sum = 0;     
        Scanner s = new Scanner(System.in);     
        System.out.print("輸入數字a的值: ");     
        a = s.nextInt();     
        System.out.print("輸入相加的項數:");     
        int n = s.nextInt();     
        int i = 0;     
        while (i < n) {

            b = b + a;      
            sum = sum + b;      
            a = a * 10;      
            ++i;     
        }     
        System.out.println(sum);
    }
}

推薦

400道——大廠Java選擇題

HR面試都會問什麼問題?(上)

HR面試都會問什麼問題(下)

文末

歡迎關注個人微信公衆號:Coder編程
歡迎關注Coder編程公衆號,主要分享數據結構與算法、Java相關知識體系、框架知識及原理、Spring全家桶、微服務項目實戰、DevOps實踐之路、每日一篇互聯網大廠面試或筆試題以及PMP項目管理知識等。更多精彩內容正在路上~
新建了一個qq羣:315211365,歡迎大家進羣交流一起學習。謝謝了!也可以介紹給身邊有需要的朋友。

文章收錄至
Github: https://github.com/CoderMerlin/coder-programming
Gitee: https://gitee.com/573059382/coder-programming
歡迎關注並star~

微信公衆號

                 我知道你 “在看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章