常見面試以及答案(二)

本文章轉載于搜狗測試

1、.junit需要注意什么?什么時候用before什么時候用beforeClass Before注釋指示此方法必須在類中的每個測試之前執行,以便執行測試所需的一些前提條件。

BeforeClass注釋指示所附加的靜態方法必須在類中的所有測試之前執行一次。當測試方法共享計算expensive的設置(例如連接到數據庫)時,會發生這種情況。

2、有兩個字符串str1,str2,判斷str2是否在str1中,有的話有幾次?位置分別在什么地方?

3、linux 查詢一個log日志中前10行的命令 查詢一個log日志后10行的命令 查詢一個log中關鍵字error出現的次數,分別在哪一行 查詢當前運行java的進程 遠程拷貝的命令

前n行,head-n(行數) ***.log

后n行,tail-n(行數) ***.log

查看error?在log中的哪些行出現,grep –rb "error" ***.log

查看error?在log中的出現次數,grep –rb "error" ***.log -c

查看當前運行的java進程,ps -ef |grep java

遠程拷貝,linux->linux:scp ***.conf

10.1.1.1:/search/odin/test/new.conf

Linux->windows,sz ***.conf

4、輸入一個矩陣,按照從外向里的順序依次打印出每一個數字。

例如,輸入: ?12? ? ?3? ? ? ?4

5? ? ?6? ???7? ??? ?8

9? ? 10? ? 11? ? 12

13? ? 14? ? 15? ? 16

則依次打印出數字:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10

算法分析:

假設這個矩陣的行數是rows,列數是columns,打印第一圈的左上角坐標是(0,0),第二圈左上角的坐標是(1,1),依次類推。我們注意到,左上角的坐標中行標和列標總是相等的,于是可以在矩陣中選取左上角為(start,start)的一圈作為我們分析的目標。

對于一個5X5的矩陣,最后一圈只有一個數字,對應的坐標為(2,2)。我們發現5>2x2.對于一個6X6的矩陣,最后一圈有4個數字,其左上角的坐標仍然是(2,2)。我們發現6>2x2依然成立。于是我們可以得出,讓循環的條件是columns>startX*2并且rows >startY*2.所以我們可以用如下循環來打印矩陣:

publicvoidPrintMatrixClockwisely(int[][]numbers,intcolumns,introws){

System.out.println("順時針打印的矩陣為:");

if(numbers==null||columns<=?0?||rows<=0)

return;

intstart=?0;

while(columns>start*2?&&rows>start*2){

PrintMatrixInCircle(numbers,columns,rows,start);

++start;

}

}

接著我們考慮如何打印矩陣的一圈的功能。我們可以把打印一圈分為四步:

第一步:從左到右打印一行

第二步:從上到下打印一列

第三步:從右到左打印一行

第四步:從下到上打印一列

每一步我們根據起始坐標和終止坐標用一個循環就能打印出一行或者一列。但仍需仔細分析打印每一步的前提條件。第一步總是需要的,因為打印一圈至少需要有一步;如果只有一行,那么就不需要第二步了,也就是說需要第二步的前提條件是終止行號大于起始行號,需要第三步的前提條件是圈內至少有兩行兩列,也就是說除了要求終止行號大于起始行號之外,還要求終止列號大于起始列號,同理,需要打印第四步的前提條件是至少有三行兩列,因此要求終止行號比起始行號至少大2,同時終止列號大于起始列號。

問題分析:

如何從鍵盤輸入一個二維矩陣:

首先需要輸入矩陣的行數和列數,即通過introws=scanner.nextInt(); 和intcolumns=scanner.nextInt();來定義輸入矩陣的行數和列數;

其次,定義一個二維矩陣,并用空格的方式輸入:

int[][]array=newint[rows][columns];

for(inti=?0;i

for(intj=?0;j

array[i][j]?=scanner.nextInt();

}

}

源程序:

[java]view plaincopy

/**************************************************************

*?Copyright?(c)?2016,

*?All?rights?reserved.

*?版?本?號:v1.0

*?題目描述:調整數組順序使奇數位于偶數前面

*??????????????題目:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有奇數位于數組的前半部分,所有偶數位于數組的后半部分

*?輸入描述:請輸入矩陣的行數

*???????????4

*???????????請輸入矩陣的列數:

*???????????5

*???????????請輸入一個矩陣,以空格隔開:

*???????????1?3?9?7?5?2?8?6?1?4?3?7?2?1?9?4?6?5?2?3

*?程序輸出:?輸入的矩陣為:

*???????????1,3,9,7,5,

*???????????2,8,6,1,4,

*???????????3,7,2,1,9,

*???????????4,6,5,2,3,

*???????????順時針打印的矩陣為:

*???????????1,3,9,7,5,4,9,3,2,5,6,4,3,2,8,6,1,1,2,7,

*?問題分析:?1.從鍵盤輸入一個矩陣

*???????????方法:首先要輸入矩陣的行數和列數,int?rows?=?scanner.nextInt();

*?????????????????然后定義一個二維矩陣,并用空格的方式輸入:

*???????????????for(int?i?=?0;i?<?rows;?i++){

for(int?j?=?0;?j?<?columns;?j++){

array[i][j]?=?scanner.nextInt();

}

}

*

*?算法描述:

*?完成日期:2016-08-22

***************************************************************/

packageorg.marsguo.offerproject20;

importjava.util.Scanner;

classPrintMatrix{

/*打印矩陣函數,通過遞歸調用來循環打印出矩陣的每一圈*/

publicvoidPrintMatrixClockwisely(int[][]?numbers,intcolumns,introws){

System.out.println("順時針打印的矩陣為:");

if(numbers?==null||?columns?<=0||?rows?<=0)

return;

intstart?=0;

while(columns?>?start*2&&?rows?>start*2){

PrintMatrixInCircle(numbers,?columns,?rows,start);

++start;

}

}

/*打印矩陣每一圈函數*/

publicvoidPrintMatrixInCircle(int[][]?numbers,intcolumns?,introws,intstart){

intendX?=?columns-1-start;

intendY?=?rows-1-start;

for(inti?=?start;i<=endX;++i){

intnumber?=?numbers[start][i];

printNumber(number);

}

if(start?<?endY){

for(inti?=?start?+1;?i?<=?endY;?++i){

intnumber?=?numbers[i][endX];

printNumber(number);

}

}

if(start?<?endX?&&start?

for(inti?=?endX?-1;i?>=?start;--i){

intnumber?=?numbers[endY][i];

printNumber(number);

}

}

if(start?<?endX?&&?start?<?endY?-1){

for(inti?=?endY-1;i?>=?start?+1;--i){

intnumber?=?numbers[i][start];

printNumber(number);

}

}

}

publicvoidprintNumber(intnumber){

System.out.print(number?+",");

}

}

publicclassPrintMatrixCircle?{

publicstaticvoidmain(String[]?args){

Scanner?scanner?=newScanner(System.in);

/*??從鍵盤輸入一個二維矩陣的方法:*/

System.out.println("請輸入矩陣的行數");

introws?=?scanner.nextInt();

System.out.println("請輸入矩陣的列數:");

intcolumns?=?scanner.nextInt();

System.out.println("請輸入一個矩陣,以空格隔開:");

int[][]?array?=newint[rows][columns];

for(inti?=0;i?<?rows;?i++){

for(intj?=0;?j?<?columns;?j++){

array[i][j]?=?scanner.nextInt();

}

}

System.out.println("輸入的矩陣為:");

for(inti?=0;i?<?rows;?i++){

for(intj?=0;?j?<?columns;?j++){

System.out.print(array[i][j]?+",");

}

System.out.println();

}

PrintMatrix?printmatrix?=newPrintMatrix();

printmatrix.PrintMatrixClockwisely(array,?columns,?rows);

}

}

程序輸出:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容