第一個:
import java.util.Scanner;
import java.util.*;
public class Validate
{
private int n;
/*count_6、count_7、count_8 用來記錄收斂那個數字的個數,在這里我記錄只要他出現了10次我就認為他收斂與他了
* 還沒想到更好的辦法,如果不設置這個,就會出現棧溢出,遞歸不出來了!不過可以看到結果輸出結果確實是對的
*/
private int count_6;
private int count_7;
private int count_8;
private Stack<Integer> stack= new Stack<Integer>();//棧用來存放素因子
public void scan()
{
Scanner scan = new Scanner(System.in);
try{
n = scan.nextInt();
}catch(NumberFormatException ne){
System.out.println(ne.getMessage());
}
}
public boolean isPrime(int n)
{
if(n>2 && 0 == n%2)//是大於2偶數
{
return false;
}else{
for(int i=3; i<n; i +=2)
{
if(0 == n%i)
return false;
}
return true;
}
}
public void analyze(int n)
{
if(isPrime(n))
{
stack.push(n);
return;
}
if(0 == n%2){
stack.push(2);
n = n/2;
analyze(n);
}else{
for(int i=3; i<n; i +=2)
{
if(isPrime(i)&& 0 == n%i)
{
stack.push(i);
n = n/i;
analyze(n);
}
}
}
}
public void mySort()
{
check(n);
}
public void check(int m)
{
if(isPrime(m)){
m++;
}
else{
analyze(m);
m = 0;
while(!stack.empty())
{
int k = stack.pop().intValue();
m += k;
}
stack.clear();
m++;
}
if(m == 6 || m == 7 || m == 8)
{
if(6 == m)
{
count_6++;
System.out.println("m = " + m);
}else if(7 == m){
count_7++;
System.out.println("m = " + m);
}else if(8 == m){
count_8++;
System.out.println("m = " + m);
}
}
if(count_6 > 10 || count_7 > 10 || count_8 > 10)
{
return;
}
check(m);
}
public static void main(String[] args)
{
Validate v = new Validate();
v.scan();
v.mySort();
}
}
第二個:
import java.util.Scanner;
class MyException extends Exception
{
public MyException(String msg)
{
super(msg);
}
}
public class MyExceptionTest {
public int scan()
{
int a = 0;
Scanner scan = new Scanner(System.in);
try{
a = scan.nextInt();
}catch(NumberFormatException ne){
System.out.println(ne.getMessage());
}
return a;
}
public int cal(int a, int b) throws MyException
{
if(b==0) throw new MyException("自定義異常: 輸入的第二個數為0");
else if(a/b<1) throw new MyException("自定義異常: 相除的結果小於1");
else return a/b;
}
public static void main(String[] args) {
MyExceptionTest me = new MyExceptionTest();
System.out.print("請輸入第一個數:");
int a = me.scan();
System.out.print("請輸入第二個數:");
int b = me.scan();
try{
System.out.println("相除的結果:" + me.cal(a, b));
}catch(MyException e){
System.out.println(e.getMessage());
}
}
}
第三個:
import java.util.*;
import java.util.Map.Entry;
public class CountCharacter {
private static Map<String, Integer> map = new LinkedHashMap<String, Integer>();
private static final int ONE = 1 ; //沒有出現過,則設置其出現一次;
private String content = null;
public void scan()
{
Scanner scan = new Scanner(System.in);
content = scan.nextLine();
}
public void count()
{
String [] text = content.split(" ");
for(int i=0; i<text.length; i++)
{
if (!map.containsKey(text[i])) {
map.put(text[i], ONE);
} else {
int value = map.get(text[i]);
map.put(text[i], value + 1);
}
}
}
public <K, V extends Number> Map<String, V> sortMap(Map<String, V> map) {
class MyMap<M, N> {
private M key;
private N value;
private M getKey() {
return key;
}
private void setKey(M key) {
this.key = key;
}
private N getValue() {
return value;
}
private void setValue(N value) {
this.value = value;
}
}
List<MyMap<String, V>> list = new ArrayList<MyMap<String, V>>();
for (Iterator<String> i = map.keySet().iterator(); i.hasNext(); ) {
MyMap<String, V> my = new MyMap<String, V>();
String key = i.next();
my.setKey(key);
my.setValue(map.get(key));
list.add(my);
}
Collections.sort(list, new Comparator<MyMap<String, V>>() {
public int compare(MyMap<String, V> o1, MyMap<String, V> o2) {
if(o1.getValue().equals(o2.getValue())) {
return o1.getKey().compareTo(o2.getKey());
}else{
return (int)(o2.getValue().doubleValue() - o1.getValue().doubleValue());
}
}
});
Map<String, V> sortMap = new LinkedHashMap<String, V>();
for(int i = 0, k = list.size(); i < k; i++) {
MyMap<String, V> my = list.get(i);
sortMap.put(my.getKey(), my.getValue());
}
return sortMap;
}
public static void main(String[] args) {
CountCharacter cc = new CountCharacter();
cc.scan();
cc.count();
Map<String, Integer> sortMap = cc.sortMap(cc.map);
Iterator<Entry<String, Integer>> it = sortMap.entrySet().iterator();
Map.Entry<String,Integer> entry = null;
int i=0;
while(it.hasNext()&& i<10) {//去前面10個
i++;
entry = (Entry<String,Integer>) it.next();
System.out.println(entry.getKey() + " --> " + entry.getValue());
}
}
}
第四個:
import java.util.Scanner;
public class IntegerShape{
public static void main(String[] args){
double a = 0;
int b = 0;
Scanner in = null;
do{
try{
System.out.print("請輸入一個的數:");
in=new Scanner(System.in);
a=in.nextFloat();
break;
}catch(Exception ne){
System.out.println("輸入數據錯誤!");
}
}while(true);
do{
try{
System.out.print("請輸入顯示的行數:");
in=new Scanner(System.in);
b=in.nextInt();
break;
}catch(Exception ne){
System.out.println("輸入數據錯誤!");
}
}while(true);
for(int i=b;i>0;i--)
{
System.out.println(a);
a=a/2;
}
}
}
第五個:
import java.util.Scanner;
import java.util.Vector;
public class MyVector {
private Vector<String> vectorStr = new Vector<String>(); //用來方單詞
private Vector<Integer> vectorInt = new Vector<Integer>();//用來記錄對應下標的單詞的個數
private static final int ONE = 1 ; //沒有出現過,則設置其出現一次;
private String content = null;
public void scan()
{
Scanner scan = new Scanner(System.in);
content = scan.nextLine();
}
public void countWord()
{
int index = -1;
String [] text = content.split(" ");
for(int i=0; i<text.length; i++)
{
if(vectorStr.contains(text[i])){ //若次單詞已經存在與vector中則只要修改對應的個數
index = vectorStr.indexOf(text[i]);
int value = vectorInt.get(index)+1;
vectorInt.setElementAt(value, index);
}
else{//若不存在則添加該單詞,同時要初始化對應下標的單詞的個數
vectorStr.add(text[i]);
vectorInt.add(ONE);
}
}
System.out.println(vectorStr);
}
public void display()
{
for(int i=0; i<vectorStr.size(); i++)
{
System.out.println(vectorStr.get(i) + "->" + vectorInt.get(i));
}
}
public static void main(String[] args) {
MyVector mv = new MyVector();
mv.scan();
mv.countWord();
mv.display();
}
}
最後一個了不容易!考慮加點分吧!
import java.util.*;
public class Exp {
private int integer;
private boolean bool = false;
private Stack<Integer> stack = new Stack<Integer>();
public void scan()
{
System.out.print("輸入一個整數:");
Scanner scan = new Scanner(System.in);
while(true){
try{
integer = scan.nextInt();
break;
}catch(Exception e){
System.out.println("輸入錯誤!");
}
}
}
public void operation()
{
for(int i=1; i<integer; i++)
{
int sum = 0;
for(int j = i; j<=integer; j++)
{
stack.push(j);
sum += j;
if(sum == integer)
{
int k = 0, n = stack.size();
bool = true;
System.out.print(integer + " = ");
while(!stack.empty())
{
k++;
if(k<n)
{
System.out.print(stack.pop().intValue() + " + ");
}
else
{
System.out.print(stack.pop().intValue() + "\n");
}
}
stack.clear();
}else if(sum > integer){
stack.clear();
}
}
}
if(!bool)
System.out.println("該整數沒有連續正整數序列!");
}
public static void main(String[] args) {
Exp e = new Exp();
e.scan();
e.operation();
}
}
以上運行過了可以!
『貳』 Java編程題,求解
// 上源碼
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
/**
* 數字鍵 0-9鍵 *鍵 #鍵
*/
private static String[][] digits = new String[][]{
// 0
{},
// 1
{},
// 2
{"A", "B", "C"},
// 3
{"D", "E", "F"},
// 4
{"G", "H", "I"},
// 5
{"J", "K", "L"},
// 6
{"M", "N", "O"},
// 7
{"P", "Q", "R", "S"},
// 8
{"T", "U", "V"},
// 9
{"W", "X", "Y", "Z"},
// *
{},
// #
{},
};
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String inputs;
String[] arr;
System.out.print("請輸入按鍵數字(多個數字空格隔開):");
while (null != (inputs = scanner.nextLine())) {
if ("exit".equalsIgnoreCase(inputs) || "quit".equalsIgnoreCase(inputs)) {
System.out.println("退出程序");
System.exit(1);
}
// 檢查args輸入參數是否合法
if (checkInput(inputs.split(" "))) {
arr = inputs.trim().split(" ");
// 查找輸入鍵的所有字母組合
List<String[]> inputCharList = new ArrayList<>();
for (String digit : arr) {
// *#01沒有字母
if ("*#01".indexOf(digit) >= 0) {
continue;
}
inputCharList.add(digits[Integer.parseInt(digit)]);
}
if (!inputCharList.isEmpty()) {
combineChars("", inputCharList);
System.out.println();
} else {
System.out.println("輸入的數字沒有字母組合。");
}
} else {
System.out.println("按鍵輸入不正確,請輸入0-9 * #鍵。");
}
System.out.print("請輸入按鍵數字(多個數字空格隔開):");
}
}
/**
* 遞歸查找所有字母組合
* @param headerChar
* @param inputCharList
*/
private static void combineChars(String headerChar, List<String[]> inputCharList) {
if (inputCharList.size() == 1) {
for (String ch : inputCharList.get(0)) {
System.out.print(headerChar + ch + " ");
}
} else {
for (String ch : inputCharList.get(0)) {
combineChars(headerChar + ch, inputCharList.subList(1, inputCharList.size()));
}
}
}
/**
* 校驗輸入是否合法
*
* @param args
* @return
*/
static boolean checkInput(String[] args) {
String validInputs = "0123456789*#";
boolean isValid = true;
for (String arg : args) {
if (arg.length() != 1 || validInputs.indexOf(arg) < 0) {
isValid = false;
break;
}
}
return isValid;
}
}
運行效果
題目里只說了輸入兩個數字的情況,輸入* # 1 0這里我直接視為無效輸入了(忽略掉了),對於輸入超過兩個數字以上的情況也能按要求輸出。(考慮到輸入的數字個數不確定因素,這里用到了遞歸,如果確定只有1或2個數字輸入,代碼會簡介很多,也不需要遞歸)
『叄』 Java的編程題目,在線等,急急急
先做兩個比較簡單的先用:
import java.util.Arrays;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Function {
/**
* 設計一個方法,完成字元串的解析。方法定義為:public void myParseString(String inputStr);
* 對於給定的字元串,取得字元串內的各個整數(不考慮小數,),然後將取得的數排序,按從小到大依次列印出來。
* @param args
*/
public static void main(String[] args) {
String s = "aa789bB22cc345dd;5.a";
new Function().myParseString(s);
}
public void myParseString(String inputStr){
String mathregix="\\d+";//數字
Vector vector=new Vector();
Pattern fun=Pattern.compile(mathregix);
Matcher match = fun.matcher(inputStr);
while (match.find()) {
vector.add(match.group(0));
}
Object[] obj=vector.toArray();
int[] result=new int[obj.length];
for (int i = 0; i < obj.length; i++) {
result[i]=Integer.parseInt((String) obj[i]);
}
Arrays.sort(result);
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
}
import java.util.Date;
/**
* 有一個學生類(Student),其有四個私有屬性,分別為:
* 學號no,字元串型;
* 姓名name,字元串型;
* 年齡age,整型;
* 生日birthday,日期型;
* 請:
* 1) 按上面描述設計類;
* 2) 定義對每個屬性進行取值,賦值的方法;
* 3) 要求學號不能為空,則學號的長度不能少於5位字元,否則拋異常;
* 4) 年齡范圍必須在[1,500]之間,否則拋出異常;
*/
public class Student {
private String no;
private String name;
private int age;
private Date birthday;
public int getAge() {
return age;
}
public void setAge(int age) throws Exception {
if(age<1||age<500)throw new Exception("年齡不合法。");
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNo() {
return no;
}
public void setNo(String no) throws Exception {
if(no==null)throw new Exception("學號不能為空!");
if(no.length()<5)throw new Exception("學號不能少於五位!");
this.no = no;
}
}
二、三題
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
/**
* 2. 設計一個GUI界面,要求打界面如下:
*點擊文件->打開,打開文件選擇器,選擇打開給定的java.txt文件,將文件內所有a-z,A-Z之間的字元顯示在界面的文本區域內。
* 3. 設置一個GUI界面,界面如下:
* 點擊文件->保存,打開文件選擇窗體,選擇一個保存路徑,將本界面文本區域內輸入的內容進行過濾,將所有非a-z,A-Z之間的字元保存到C盤下的java.txt文件內。
* Java.txt文件內容如下:
* 我們在2009年第2學期學習Java Programming Design,於2009-6-16考試。
*
*
*
*/
public class FileEditer extends javax.swing.JFrame implements ActionListener {
private JMenuBar menubar;
private JMenu file;
private JMenuItem open;
private JTextArea area;
private JMenuItem save;
private JFileChooser jfc;
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FileEditer inst = new FileEditer();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public FileEditer() {
super();
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
{
area = new JTextArea();
getContentPane().add(area, BorderLayout.CENTER);
area.setText("文本區");
}
{
menubar = new JMenuBar();
setJMenuBar(menubar);
{
file = new JMenu();
menubar.add(file);
file.setText("文件");
file.setPreferredSize(new java.awt.Dimension(66, 21));
{
open = new JMenuItem();
file.add(open);
open.setText("打開");
open.setBorderPainted(false);
open.setActionCommand("open");
open.addActionListener(this);
}
{
save = new JMenuItem();
file.add(save);
save.setActionCommand("save");
save.setText("保存");
save.addActionListener(this);
}
}
}
{
jfc=new JFileChooser();
}
pack();
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent e) {
if("open".equals(e.getActionCommand())){
int result=jfc.showOpenDialog(this);
if(result==jfc.APPROVE_OPTION){
File file=jfc.getSelectedFile();
try {
byte[] b=new byte[1024];
FileInputStream fis=new FileInputStream(file);
fis.read(b);
fis.close();
String string=new String(b,"GBK");
string=string.replaceAll("[^a-zA-Z]*", "");
area.setText(string.trim());
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException es) {
// TODO Auto-generated catch block
es.printStackTrace();
}
}
}else if("save".equals(e.getActionCommand())){
int result=jfc.showSaveDialog(this);
if(result!=jfc.APPROVE_OPTION)return;
File file=jfc.getSelectedFile();
try {
if(!file.exists()){
file.createNewFile();
}
String string = area.getText();
string=string.replaceAll("[a-zA-Z]*", "");
byte[] b=string.getBytes();
FileOutputStream fis=new FileOutputStream(file);
fis.write(b);
fis.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException es) {
// TODO Auto-generated catch block
es.printStackTrace();
}
}
}
}
『肆』 求這個Java編程題
程序把通過循環把數組逆序,輸出7 6 5 4 3 2 1
寫結果的題目,可以粘貼到電腦裡面執行一下
『伍』 Java編程常見面試題目,要求正確答案
第一,談談final, finally, finalize的區別。
final?修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載finally?再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。
finalize?方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)?
匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面,由另一個內部類實現。
第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用上。具體可見http: //www.frontfree.net/articles/services/view.ASP?id=704&page=1
註: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象
第四,&和&&的區別。
&是位運算符。&&是布爾邏輯運算符。
第五,HashMap和Hashtable的區別。
都屬於Map介面的類,實現了將惟一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。
Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步的。
第六,Collection 和 Collections的區別。
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的介面,它是各種集合結構的父介面。
第七,什麼時候用assert。
斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為 true。如果表達式計算為 false,那麼系統會報告一個 AssertionError。它用於調試目的:
assert(a > 0); // throws an AssertionError if a <= 0
斷言可以有兩種形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 應該總是產生一個布爾值。
Expression2 可以是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。
斷言在默認情況下是禁用的。要在編譯時啟用斷言,需要使用 source 1.4 標記:
Javac -source 1.4 Test.java
要在運行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。
要在運行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。
要系統類中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。
可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用於驗證傳遞給私有方法的參數。不過,斷言不應該用於驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試後置條件。另外,斷言不應該以任何方式改變程序的狀態。
第八,GC是什麼? 為什麼要有GC? (基礎)。
GC是垃圾收集器。Java 程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
第九,String s = new String("xyz");創建了幾個String Object?
兩個對象,一個是「xyx」,一個是指向「xyx」的引用對象s。
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
第十一,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。
第十二,sleep() 和 wait() 有什麼區別? 搞線程的最愛
sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)「醒來」的線程具有更高的優先順序,(b)正在運行的線程因為其它原因而阻塞。
wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。
第十三,Java有沒有goto?
Goto?java中的保留字,現在沒有在java中使用。
第十四,數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。
String有有length()這個方法。
第十五,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
第十六,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?
Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。
第十七,給我一個你最常見到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
第十八,error和exception有什麼區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
第十九,List, Set, Map是否繼承自Collection介面?
List,Set是
Map不是。
第二十,abstract class和interface有什麼區別?
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。
第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
都不能
第二十二,介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?
介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
第二十三,啟動一個線程是用run()還是start()?
啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。
第二十四,構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
第二十五,是否可以繼承String類?
String類是final類故不可以繼承。
第二十六,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
第二十七,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候被執行,在return前還是後?
會執行,在return前執行。
第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?
有C背景的程序員特別喜歡問這種問題。
2 << 3
第二十九,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,有相同的hash code。
第三十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這里到底是值傳遞還是引用傳遞?
是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。
第三十二,編程題: 寫一個Singleton出來。
Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
一般Singleton模式通常有幾種種形式:
第一種形式: 定義一個類,它的構造函數為private的,它有一個static的private的該類變數,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
public class Singleton {
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定義一個類,它的構造函數為private的,所有方法為static的。
一般認為第一種形式要更加安全些
第三十三 Hashtable和HashMap
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許
還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。
『陸』 javab編程題目求大神幫忙解答一下,謝謝!
編寫電池類(Cell):具有品牌屬性,可以續電
publicclassCell{
privateStringbrand;
publicStringgetBrand(){
returnbrand;
}
publicvoidsetBrand(Stringbrand){
this.brand=brand;
}
Cell(Stringbrand){
this.brand=brand;
}
publicvoidrelay(){
System.out.println("正在續電.......");
}
}
編寫測試類(TestCell)
importjavax.swing.CellEditor;
publicclassTestCell{
publicstaticvoidmain(String[]args){
Cellcell=newCell("大牌電池");
System.out.println("測試結果:"+cell.getBrand());
cell.relay();
}
}
『柒』 java 競賽編程題,有點難度啊!求大俠
package computer;
import java.util.Arrays;import java.util.Random;
import java.util.Scanner;
public class SerachFunction {
public static int[] allnum=new int[20];
// picture ...like a picture
public void picOne(){
System.out.println("************");
System.out.println("1.選擇排序");
System.out.println("2.冒泡排序");
System.out.println("3.插入排序");
System.out.println("4.全排列");
System.out.println("5.數字分解為數字和");
System.out.println("6.殺死小朋友問題");
System.out.println("7.階乘");
System.out.println("8.雙色球");
System.out.println("9.100-1000的水仙花數");
System.out.println("10.正數分解因數");
System.out.println("11.恐怖的事情 千萬不要輸入11");
System.out.println("輸入-1退出");
System.out.println("輸入-2查看問題注釋");
System.out.println("************");
}
public void picTwo(){
System.out.println("注意輸入單個字元參數(根據選項輸入,多個參數以逗號分割): ");
}
public void picThree(){
System.out.println("5號問題為輸入某一數字 出現這個數字可由哪些數字相加而得");
System.out.println("6號問題為9(輸入)個已編號的小朋友圍一圈報數1,2,3報到3的拖出去xx問剩下的小朋友是幾號");
}
public void picFour(){
System.out.println("0>_<0~");
System.out.println("恐怖的事情發生了...說了不要點...");
System.out.println("樓主累死了....");
}
// main
public static void main(String[] args){
SerachFunction fc=new SerachFunction();
fc.inputFunction();
}
public void inputFunction(){ //接受指令並調用相關函數
int command;
char[] params;
Scanner sc=new Scanner(System.in);
while(true){
picOne();
if((command=sc.nextInt())==-1){
break;
}
picTwo();
params=getParamsArray(sc.next());
System.out.println();
switch(command){
case 1:
selectSort(params);
break;
case 2:
bubbleSort(params);
break;
case 3:
insertionSort(params);
break;
case 4:
fullArray(params,0);
break;
case 5:
resolveNum(getQuondam(params),0);
break;
case 6:
killChildren(getQuondam(params));
break;
case 7:
factorial(getQuondam(params),1);
break;
case 8:
twoColorBall();
break;
case 9:
daffodil();
break;
case 10:
int all=0;
primeFactor(getQuondam(params),0);
break;
case 11:
picFour();
break;
case -2:
picThree();
break;
}
System.out.println("Y(^_^)Y");
}
System.out.println("(*^_^*)");
}
/*
* com function
* */
public char[] getParamsArray(String params){
params=params.replaceAll(",","");
return params.toCharArray();
}//to get char[] params
// 選擇排序
public void selectSort(char[] params){
for(int i=0;i<params.length-1;i++){
for(int m=i+1;m<params.length;m++){
if(params[i]>params[m]){
changePlace(params,m,i);
}
}
}
showChar(params);
System.out.println("選擇排序結束");
}
//冒泡排序
public void bubbleSort(char[] params){
for(int i=params.length-1;i>0;i--){
for(int m=0;m<i;m++){
if(params[m]>params[m+1]){
changePlace(params,m,m+1);
}
}
}
showChar(params);
System.out.println("冒泡排序結束");
}
//插入排序
public void insertionSort(char[] params){
for(int i=1;i<params.length;i++){
for(int m=i-1;m>=0;m--){
if(params[m+1]<params[m]){
changePlace(params,m+1,m);
}
}
}
showChar(params);
System.out.println("插入排序結束");
}
//全排列
public void fullArray(char[] params,int begin){
if(begin==params.length){
showChar(params);
}
for(int i=begin;i<params.length;i++){
if(begin<=params.length){
changePlace(params,begin,i);
fullArray(params,begin+1);
changePlace(params,begin,i);
}
}
}
//數字分解為數字和
public void getAllNum(int[] num,int end){
System.out.print("分解方式:");
for(int i=0;i<end;i++){
System.out.print(num[i]);
if(i+1!=end){
System.out.print(',');
}
}
System.out.println("");
}
public int getArrayT(int[] num,int end){
int tot=0;
for(int i=0;i<end;i++){
tot+=num[i];
}
return tot;
}
public boolean getShoud(int[] num,int end){
for(int i=0;i<end;i++){
if(i+1<end){
if(num[i+1]<num[i]){
return false;
}
}
}
return true;
}
public void resolveNum(int num,int begin){
if(getArrayT(allnum,begin)==num){
if(getShoud(allnum,begin)){
getAllNum(allnum,begin);
}
}
for(int i=1;i<=num;i++){
if(getArrayT(allnum,begin)<=num){
allnum[begin]=i;
resolveNum(num,begin+1);
}
}
}
// 殺死小朋友
public void killChildren(int child){
int alivechild=child;
int num=0;
int index=0;
boolean[] childisdead=new boolean[child];
Arrays.fill(childisdead,true);
while(alivechild!=1){
if(childisdead[index]){
num++;
if(num%3==0){
alivechild--;
childisdead[index]=false;
num=0;
}
}
index++;
if(index==child)
index=0;
}
for(int i=0;i<childisdead.length;i++){
if(childisdead[i])
System.out.println((int)(i+1)+"號小朋友還活著");
}
}
//階乘
public void factorial(int end,long output){
if(end==1){
System.out.println(output);
return;
}
output=output*end;
factorial(end-1,output);
}
//two color ball;
public void twoColorBall(){
int[] redball=new int[6];
int blueball=(int)(Math.random()*15+1);
int index=0;
while(true){
boolean bol=true;
int red=(int)(Math.random()*32+1);
for(int i=0;i<=index;i++){
if(red==redball[index]){
bol=false;
}
}
if(bol){
redball[index]=red;
index++;
}
if(index==6){
break;
}
}
System.out.print("紅色:");
for(int i=0;i<6;i++){
System.out.print(redball[i]+",");
}
System.out.println("");
System.out.println("藍色:"+blueball);
}
//水仙花
public void daffodil(){
int hundreds=0,decade=0,unit=0;
System.out.print("水仙花數:");
for(int i=100;i<1000;i++){
hundreds=i/100;
decade=(i%100)/10;
unit=(i%100)%10;
hundreds=hundreds*hundreds*hundreds;
decade=decade*decade*decade;
unit=unit*unit*unit;
if(i==(hundreds+decade+unit)){
System.out.print(i+",");
}
}
System.out.println("");
}
//分解為因數
public void getPriShow(int[] num,int end){
System.out.print("分解方式:");
for(int i=0;i<end;i++){
System.out.print(num[i]);
if(i+1!=end){
System.out.print('*');
}
}
System.out.println("");
}
public void primeFactor(int num,int begin){
if(num==1){
if(getShoud(allnum,begin)){
getPriShow(allnum,begin);
}
return;
}
for(int i=2;i<=num;i++){
if(num%i==0){
allnum[begin]=i;
primeFactor(num/i,begin+1);
}
}
}
//展示char數組
public void showChar(char[] params){
for(int i=0;i<params.length;i++){
System.out.print(params[i]);
if(i+1!=params.length){
System.out.print(',');
}
}
System.out.println("");
}
//兩數換位置
public void changePlace(char[] params,int begin,int end){
int act;
act=params[begin];
params[begin]=params[end];
params[end]=(char) act;
}
//得到原數
public int getQuondam(char[] num){
return Integer.parseInt(String.valueOf(num));
}
}
//水仙花水的那個就是
『捌』 java大賽的一道編程題
publicclassToList<T>{
privateList<T>list=newArrayList<T>();
@SuppressWarnings({"rawtypes","unchecked"})
publicstaticToListcreate(Object...vs){
ToListtoList=newToList();
toList.add(vs);
returntoList;
}
@SuppressWarnings("unchecked")
publicToList<T>add(T...vs){
if(vs!=null){
for(Tv:vs){
list.add(v);
}
}
returnthis;
}
publicList<T>toList(){
returnlist;
}
publicstaticvoidmain(String[]args){
ToList<String>toList1=newToList<String>();
//往toList1里添加元素
toList1.add("a","b");
//可以一次添加多個元素,而且add方法能以串式方式調用
toList1.add("c","d","e").add("f").add("g","h","i","j");
//添加完後,將元素導出成一個List
java.util.List<String>list1=toList1.toList();
//
//這段代碼檢測list1的內容
if(list1.size()!=10){
thrownewRuntimeException();
}
java.util.List<Integer>list2=ToList.create(0,1,2).add(3,4)
.add(0,1).toList();
//
//以下代碼檢測list2的內容
int[]ia={0,1,2,3,4,0,1};
for(inti=0;i<7;i++){
if(list2.get(i)!=ia[i]){
thrownewRuntimeException();
}
}
}
}
『玖』 Java程序設計題目
3, 文件名:Three.java
public class Three {
public static void main(String[] args) {
Student stu = new Student("Zhang San", true, (short)12);
System.out.println("Student name: " + stu.name);
System.out.println("Student is a male?: " + stu.sex);
System.out.println("Student's age: " + stu.age);
stu.work();
stu.study();
Teacher teacher = new Teacher();
teacher.learnMoney();
}
}
abstract class Person{//抽象類Person
protected String name;
protected boolean sex;
protected short age;
protected abstract void work(); //work抽象方法
}
interface Learnmoney{//Learnmoney介面
public void learnMoney();
}
interface Study{//Study介面
public void study();
}
class Student extends Person implements Study{//Student類
public void work() {
System.out.println("學生的工作是努力學習");
}
public Student(String name, boolean sex, short age){
super.name = name;
super.sex = sex;
super.age = age;
}
public void study() {
System.out.println("學生正在學習");
}
}
class Teacher extends Person implements Learnmoney{
public void work() {
System.out.println("教師的工作是教書育人");;
}
public void learnMoney() {
System.out.println("教師正在賺錢");
}
}
class Docotor extends Person implements Learnmoney{
public void work() {
System.out.println("醫生的職責是救死扶傷");
}
public void learnMoney() {
System.out.println("醫生正在賺錢");
}
}
------------------------------------
4文件名:Four.java
public class Four {
public static void main(String[] args) {
Rectangle r = new Rectangle(3, 4);
System.out.println("Area is : " + r.area());
System.out.println("Circle is: " + r.circle());
}
}
class Rectangle{
private double width;
private double height;
public Rectangle(double width, double height){
this.width = width;
this.height = height;
}
public double circle(){//求周長
return (width + height) * 2;
}
public double area(){//求面積
return width * height;
}
}
--------------------
5Five.java
public class Five {
public static void main(String[] args) {
AImpl a = new AImpl();
a.paint();
}
}
interface A {
public int method1(int x);
public int method2(int x, int y);
}
class AImpl implements A{
public int method1(int x) {
return (int)Math.pow(x, 5);
}
public int method2(int x, int y) {
return x > y? x: y;
}
public void paint(){
int result1 = method1(2);
int result2 = method2(2, 8);
System.out.println("method1(2) = " + result1);
System.out.println("method2(2, 8) = " + result2);
}
}
-----------------------------測試
method1(2) = 32
method2(2, 8) = 8