`
daoger
  • 浏览: 529611 次
  • 性别: Icon_minigender_1
  • 来自: 山东济南
社区版块
存档分类
最新评论

一道java笔试题

阅读更多
这是某公司的一道java笔试题,题目内容如下:
写一个java程序,实现对一个二维数组按指定的列集进行排序?要求实现类似sql中order by的功能,移动时,整行移动,不能打乱整行顺序。
可将二维数组想象成数据库里的一个表记录集,然后按指定的列集进行排序,即order by col1,col2。
//a为二维数组,sortCols是要按哪几列排序,如0,2,以逗号分隔,升序排。
public void sortIntArrs(int[][] a,String sortCols)
{
}

以下是我回答的程序:

public class MyArray
{
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		int array[][] = new int[][]
		{
		{ 12, 34, 68, 32, 9, 12, 545 },
		{ 34, 72, 82, 57, 56, 0, 213 },
		{ 12, 34, 68, 32, 21, 945, 23 },
		{ 91, 10, 3, 2354, 73, 34, 18 },
		{ 12, 83, 189, 26, 27, 98, 33 },
		{ 47, 23, 889, 24, 899, 23, 657 },
		{ 12, 34, 68, 343, 878, 235, 768 },
		{ 12, 34, 98, 4, 56, 78, 12, 546 },
		{ 26, 78, 2365, 78, 34, 256, 873 } };// 要排序的数组
		int co[] = new int[]
		{ 0, 1, 2, 3, 4 };// 指定进行排序的列索引及排序顺序
		MyArray arraylist = new MyArray();
		arraylist.sortIntArrs(array, co);
	}

	public void sortIntArrs(int[][] a, int[] co)
	{
		for (int i = 0; i < a.length - 1; i++)
		{
			for (int j = i + 1; j < a.length; j++)
			{
				sort(a, co, i, j, 0);
			}
		}
		for (int m = 0; m < a.length; m++)
		{
			for (int n = 0; n < a[m].length; n++)
			{
				System.out.print(a[m][n] + ",");
			}
			System.out.println();
		}
	}

	public void sort(int[][] a, int[] co, int i, int j, int co_index)
	{
		if (co_index < co.length)
		{
			if (a[i][co[co_index]] > a[j][co[co_index]])
			{
				int aa[] = a[i];
				a[i] = a[j];
				a[j] = aa;
			} else if (a[i][co[co_index]] == a[j][co[co_index]])
			{
				sort(a, co, i, j, co_index + 1);
			}
		} else
			return;
	}
}



我的方法中没有将指定的列用字符串参数传递,我采用的是整型数组!
不过我的程序是不正确的,各位有正确的解决方法吗?请赐教!
分享到:
评论
12 楼 daoger 2007-06-06  
抛出异常的爱 写道
daoger 写道
抛出异常的爱 写道
public void 冒泡();
public void 递归();
public void 交换();

  { 12, 34, 98, 4, 56, 78, 12, 546 }, //这行多了。。。故意的么?

恩!说是二维数组,但是每一行不一定就是列数一样啊!


本来我也跟你用的差不多的方法,但是。。。。

   但是什么啊?
11 楼 抛出异常的爱 2007-06-04  
daoger 写道
抛出异常的爱 写道
public void 冒泡();
public void 递归();
public void 交换();

  { 12, 34, 98, 4, 56, 78, 12, 546 }, //这行多了。。。故意的么?

恩!说是二维数组,但是每一行不一定就是列数一样啊!


本来我也跟你用的差不多的方法,但是。。。。
10 楼 Norther 2007-06-03  
我面试过1家公司也问过这个...不会是同一家吧..汗 附上我的

public class SortUtil
{
	/**
	 * 问题;写一个java程序,实现对一个二维数组按指定的列集进行排序?要求实现类似sql中order by的功能,移动时,整行移动,不能打乱整行顺序。
	 * 可将二维数组想象成数据库里的一个表记录集,然后按指定的列集进行排序,即order by col1,col2。
	 * a为二维数组,sortCols是要按哪几列排序,如0,2,以逗号分隔,升序排。
	 * 
	 * @param a
	 *            为二维数组
	 * @param sortCols
	 *            是要按哪几列排序,如0,2,以逗号分隔,升序排。
	 */
	public void sortIntArrs(int[][] a, String sortCols)
	{
		// 将所给参数转化成元素为列的数组
		int[] columnArray = createColumnArray(sortCols);
		// 将所给数组按照参数中每一列进行升序排序
		for (int i = 0; i < columnArray.length; i++)
		{
			orderByColumn(a, columnArray[i]);
		}

	}

	/**
	 * 将所给数组按某列元素升序排序
	 * 
	 * @param a
	 *            将要排序的数组
	 * @param column
	 *            排序参照的列
	 */
	public static void orderByColumn(int[][] a, int column)
	{
		// 冒泡排序
		for (int i = 0; i < a.length; i++)
		{
			if (a[i].length <= column)
				throw new IllegalArgumentException(
						"the given array not has colmun " + column);

			for (int j = 0; j < a[i].length - i - 1; j++)
			{

				if (a[j][column] > a[j + 1][column])
				{
					int[] tempRow = a[j];

					a[j] = a[j + 1];

					a[j + 1] = tempRow;
				}

			}
		}
	}

	/**
	 * 得到所要排序的列数组
	 * 
	 * @param sortCols
	 * @return int[] 元素为要排序列的数组
	 */
	public static int[] createColumnArray(String sortCols)
	{
		try
		{
			String[] cols = sortCols.split(",");

			int[] columnArray = new int[cols.length];

			for (int i = 0; i < cols.length; i++)
			{
				columnArray[i] = Integer.parseInt(cols[i]);
			}

			return columnArray;
		}
		catch (NumberFormatException e)
		{
			throw new IllegalArgumentException(
					"the argument [" + sortCols + "] is illegal ,because it must be split by ',' and each element is integer ");
		}
	}
}


9 楼 抛出异常的爱 2007-06-01  
最后的程序。。。。
调程序时间花的好多啊,(手生的厉害。。)
看来面试过不了。。

package com.maodajun.lib;

import java.util.ArrayList;
import java.util.List;


public class MyArray2 {

	private List[] table;
	private List order;
//	public String getOrder() {
//		return order.toArray().toString();
//	}
        /** 拆字符串。。。变成list**/
//	public void setOrder(String order) {
//		//todo
//	}
	public void setOrder(List order){
		this.order = order;
		
	}/**返回。。为了打印方便**/
	public List getTable() {
		List result = new ArrayList();
		for(int i = 0 ; i < table.length ; i ++){
			result.add(table[i]);
		}
		return result;
	}/**数组变list**/
	public void setTable(int[][] array) {		
		List tmp ;
		table = new ArrayList[array.length];
		for(int i = 0 ; i < array.length ; i++){
			tmp = new ArrayList();
			for(int j = 0 ; j < array[i].length ; j ++){
				tmp.add(""+array[i][j]);
			}
			table[i]=tmp;
		}
	}/**交换**/
	public void changeElmane(int i, int j) {
		List tmp = table[i];
		table[i] = table[j];
		table[j] = tmp;
		
	}/**底归**/
	public int tableComp(int orderno, int i, int j) {
		if(
				Integer.parseInt(table[i].get(Integer.parseInt(order.get(orderno).toString())).toString())
				>
				Integer.parseInt(table[j].get(Integer.parseInt(order.get(orderno).toString())).toString())
		   ){
			return -1;			
		}else if(
				Integer.parseInt(table[i].get(Integer.parseInt(order.get(orderno).toString())).toString())
				==
				Integer.parseInt(table[j].get(Integer.parseInt(order.get(orderno).toString())).toString())
				
			){
			return tableComp(orderno+1,i , j );
		}else{
			return 1;
		}		
	}/**冒泡**/
	public void POPcompare() {
		for(int i = 0 ; i < table.length ; i++){
			for(int j = i +1 ; j < table.length; j ++ ){
				if(tableComp(0,i,j)<0){
					changeElmane(i,j);
				}
			}
		}
		
	}
	

}


测试代码:
package com.maodajun.test;

import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;
import org.apache.commons.collections.CollectionUtils;

public class MyArray2Test extends TestCase {
	public MyArray2 myArray2;
	public static void main(String[] args) {
		junit.textui.TestRunner.run(MyArray2Test.class);
	}

	protected void setUp() throws Exception {
		super.setUp();
		myArray2 = new MyArray2();
		
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}

	/*
	 * Test method for 'com.maodajun.lib.MyArray2.setTable(int[][])'
	 */
	public void testSetTable() {
		int[][] array= {
				{0,1},
				{2,3,4},
		};
		myArray2.setTable(array);
		assertEquals(myArray2.getTable().size(),2);
		assertEquals(((List)myArray2.getTable().get(0)).size(),2);
		assertEquals(((List)myArray2.getTable().get(1)).size(),3);
		for(int i = 0 ; i < array.length ; i ++){
			for(int j = 0 ; j < array[i].length;j++){
				System.out.print(array[i][j]);
				System.out.print("\t");
			}
				System.out.println();
		}
		System.out.println(myArray2.getTable());
	}
	public void testTableChange() {
		int[][] array= {
				{0,1},
				{2,3,4},
		};
		myArray2.setTable(array);
		assertEquals(myArray2.getTable().size(),2);
		myArray2.changeElmane(0,1);
		assertEquals(((List)myArray2.getTable().get(0)).size(),3);
		assertEquals(((List)myArray2.getTable().get(1)).size(),2);
		for(int i = 0 ; i < array.length ; i ++){
			for(int j = 0 ; j < array[i].length;j++){
				System.out.print(array[i][j]);
				System.out.print("\t");
			}
				System.out.println();
		}
		System.out.println(myArray2.getTable());
	}
	public void testTableComp() {
		int[][] array= {
				{0,1},
				{2,3,4},
		};

		myArray2.setTable(array);
		assertEquals(myArray2.getTable().size(),2);
		List olist = new ArrayList();
		olist.add(""+0);
		olist.add(""+1);
		myArray2.setOrder(olist);
		assertEquals(1,myArray2.tableComp(0,0,1));

		for(int i = 0 ; i < array.length ; i ++){
			for(int j = 0 ; j < array[i].length;j++){
				System.out.print(array[i][j]);
				System.out.print("\t");
			}
				System.out.println();
		}
		System.out.println(myArray2.getTable());
	}
	public void testTableComp2() {
		int[][] array= {
				{2,3,4},
				{0,1},
				
		};

		myArray2.setTable(array);
		assertEquals(myArray2.getTable().size(),2);
		List olist = new ArrayList();
		olist.add(""+0);
		olist.add(""+1);
		myArray2.setOrder(olist);
		assertEquals(-1,myArray2.tableComp(0,0,1));

		for(int i = 0 ; i < array.length ; i ++){
			for(int j = 0 ; j < array[i].length;j++){
				System.out.print(array[i][j]);
				System.out.print("\t");
			}
				System.out.println();
		}
		System.out.println(myArray2.getTable());
	}
	public void testTableComp3() {
		int[][] array= {
				{2,3,4},
				{2,1},
				
		};

		myArray2.setTable(array);
		assertEquals(myArray2.getTable().size(),2);
		List olist = new ArrayList();
		olist.add(""+0);
		olist.add(""+1);
		myArray2.setOrder(olist);
		assertEquals(-1,myArray2.tableComp(0,0,1));

		for(int i = 0 ; i < array.length ; i ++){
			for(int j = 0 ; j < array[i].length;j++){
				System.out.print(array[i][j]);
				System.out.print("\t");
			}
				System.out.println();
		}
		System.out.println(myArray2.getTable());
	}
	
	public void testPOPcompare() {
		int[][] array= {
				{2,3,4},
				{2,1},
				
		};

		myArray2.setTable(array);
		assertEquals(myArray2.getTable().size(),2);
		List olist = new ArrayList();
		olist.add(""+0);
		olist.add(""+1);
		myArray2.setOrder(olist);
		
		myArray2.POPcompare();
		assertEquals(((List)myArray2.getTable().get(0)).size(),2);
		assertEquals(((List)myArray2.getTable().get(1)).size(),3);
		for(int i = 0 ; i < array.length ; i ++){
			for(int j = 0 ; j < array[i].length;j++){
				System.out.print(array[i][j]);
				System.out.print("\t");
			}
				System.out.println();
		}
		System.out.println(myArray2.getTable());
	}
	public void testTure() {
        int array[][] = new int[][]  
                     	         {  
                     	         { 12, 34, 68, 32, 9, 12, 545 },  
                     	         { 34, 72, 82, 57, 56, 0, 213 },  
                     	         { 12, 34, 68, 32, 21, 945, 23 },  
                     	         { 91, 10, 3, 2354, 73, 34, 18 },  
                     	         { 12, 83, 189, 26, 27, 98, 33 },  
                     	         { 47, 23, 889, 24, 899, 23, 657 },  
                     	         { 12, 34, 68, 343, 878, 235, 768 },  
                     	         { 12, 34, 98, 56, 78, 12, 546 },  
                     	         { 26, 78, 2365, 78, 34, 256, 873 } };
        
		List olist = new ArrayList();
		olist.add(""+0);
		olist.add(""+1);
		olist.add(""+2);
		olist.add(""+3);
		olist.add(""+4);
		
		myArray2.setTable(array);
		myArray2.setOrder(olist);
		myArray2.POPcompare();
		
		for(int i = 0 ; i < array.length ; i ++){
			for(int j = 0 ; j < array[i].length;j++){
				System.out.print(array[i][j]);
				System.out.print("\t");
			}
				System.out.println();
		}
		for(int i = 0 ; i <myArray2.getTable().size(); i++)
		System.out.println(myArray2.getTable().get(i));
	}	
	
	
		
}

引用
12 34 68 32 9 12 545
34 72 82 57 56 0 213
12 34 68 32 21 945 23
91 10 3 2354 73 34 18
12 83 189 26 27 98 33
47 23 889 24 899 23 657
12 34 68 343 878 235 768
12 34 98 56 78 12 546
26 78 2365 78 34 256 873
[12, 34, 68, 32, 9, 12, 545]
[12, 34, 68, 32, 21, 945, 23]
[12, 34, 68, 343, 878, 235, 768]
[12, 34, 98, 56, 78, 12, 546]
[12, 83, 189, 26, 27, 98, 33]
[26, 78, 2365, 78, 34, 256, 873]
[34, 72, 82, 57, 56, 0, 213]
[47, 23, 889, 24, 899, 23, 657]
[91, 10, 3, 2354, 73, 34, 18]
8 楼 抛出异常的爱 2007-06-01  
重作数组的工作量大了。。。
不得以非要用ArrayList了
7 楼 daoger 2007-06-01  
抛出异常的爱 写道
public void 冒泡();
public void 递归();
public void 交换();

  { 12, 34, 98, 4, 56, 78, 12, 546 }, //这行多了。。。故意的么?

恩!说是二维数组,但是每一行不一定就是列数一样啊!
6 楼 抛出异常的爱 2007-06-01  
public void 冒泡();
public void 递归();
public void 交换();

  { 12, 34, 98, 4, 56, 78, 12, 546 }, //这行多了。。。故意的么?
5 楼 liusong1111 2007-05-31  
lix23 写道
Schwartzian变换都用不上

这个变换是个什么咚咚?


见你那本《programming ruby》第457-458页 Enumerable#sort_by 的说明。
ps: 我隐。
4 楼 lix23 2007-05-31  
Schwartzian变换都用不上

这个变换是个什么咚咚?
3 楼 liusong1111 2007-05-31  
排序条件这么简单,Schwartzian变换都用不上。
2 楼 daoger 2007-05-31  
什么叫克隆?老兄,说的明白一点吧!
1 楼 抛出异常的爱 2007-05-31  
对于数组你不克隆一次再排么?

相关推荐

    原创一道Java笔试面试题考考大家

    根据提供的文件信息,我们可以分析出这是一道关于Java继承与方法重写的相关笔试面试题。题目涉及到了Java类的继承、方法重写、实例化对象时的调用顺序以及对象多态性等知识点。接下来,我们将对这些知识点进行详细的...

    一道java面试题 行列转换

    ### Java面试题:行列转换详解 #### 一、问题背景 在进行数据分析或者报表处理时,经常需要将数据从一种格式转换成另一种格式以便更好地展示或分析。其中一种常见的转换需求是从行转列(即行列转换)。本篇文章将...

    每天60秒,搞定一道JAVA面试题.zip

    【一线互联网大厂Java核心面试题库】Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等..

    阿里软件JAVA笔试题

    "阿里软件JAVA笔试题" 阿里软件JAVA笔试题是阿里巴巴公司为招聘软件开发工程师所设计的一份笔试题目,涵盖了JAVA语言、数据结构、算法、设计模式、数据库等多方面的知识点。 本题目共有15道题目,涵盖了以下几个...

    Java 面试题 Java 面试题

    根据给定的文件内容,我们可以总结出一系列与Java面试相关的知识点。下面将详细解析每一道题目涉及的关键概念。 ### 第一部分:基础知识 #### 1. final, finally, finalize的区别 - **final**: 用于声明变量、方法...

    android和java面试大全集

    一道测试notepad笔试题.doc 奇虎面试题.doc 喜安科 面试题.doc 北京博彦科技笔试+面试.doc 清华同方开发的面试题 (有兴趣的看一下了 !) 中软的面试题(转贴).doc 亚控科技比试题.doc 神州泰岳测试试题...

    Java高级面试题汇总及答案(2022年Java面试题及答案大全)

    这是一道经典的Java面试题。解决这个问题需要了解Java的内存管理机制,包括FULL GC的触发条件、Perm Gen的设置、System.gc()方法的调用等。 Java集合框架 3. Java集合框架是Java语言中的一种重要概念,它提供了...

    百家大公司java笔试题

    "100家大公司Java笔试题汇总.doc"这份文档提供了丰富的实践材料,建议考生们深入研究每一道题,不仅要找出正确答案,还要理解背后的原理,这样才能在真正的笔试中游刃有余,成功叩开心仪企业的门扉。同时,通过反复...

    企业公司软件测试面试笔试题集合 软件测试面试题

    企业公司软件测试面试笔试题集合 软件测试面试题 (测试基础).doc 01_企业面试试卷(综合).doc 01_企业面试试卷(综合)_参考答案.doc 04_企业面试试卷(测试基础).doc 04_企业面试试卷(测试基础)_参考答案.doc...

    常见的Java上机面试题

    ### 常见的Java上机面试题:深入解析与实战指南 在IT行业的求职过程中,尤其是对于软件工程师或开发者而言,上机编程面试成为了一道必经的门槛。这种形式的面试旨在全面评估应聘者的技术能力,不仅考察理论知识的...

    java的一些面试题

    Java面试题涵盖了许多核心知识点,包括基础技术、项目经验、逻辑推理和SQL查询。下面将对这些方面进行详细的解析。 1. **基础技术题** - **UML图**:UML(统一建模语言)有多种图表,包括类图、对象图、用例图、...

    史上最难的一道Java面试题

    Java面试中的这道题目主要考察的是并发...总结来说,这道Java面试题主要测试了对`synchronized`关键字的理解,包括其作用、用法以及在并发环境中的内存可见性。理解这些概念对于编写正确且安全的多线程代码至关重要。

    java面试题-leetcode题解之第31题下一个排列.zip

    "java面试题_leetcode题解之第31题下一个排列" 的描述进一步确认了这是关于Java面试中的一道算法题目的解答,主要关注如何找到一个排列的下一个排列。在面试中,这样的问题通常用来评估候选人在处理数组操作和算法...

    Java程序员面试必备知识点,包括面试笔试题,简历模板,简历制作等

    java程序员求职之前看这一套就够了。包括Java程序员阿里面经等,java求职必备知识点,简历模板,JAVA核心知识点整理,蓝桥杯java历年真题及答案整理(共129道题目及答案),Java面试突击-V3.0

    java笔试题大集合及答案(另附各大公司笔试题)

    Java笔试题大集合是针对Java开发者进行技术面试和求职准备的重要资源,涵盖了广泛的知识点,旨在测试应聘者的编程基础、算法理解、数据结构、多线程、网络、数据库以及Java特性的掌握程度。这个大礼包通常包含不同...

    java截取字符串程序,一道面试题。答案

    java截取字符串,一道面试题。好像没有找到正确答案,今天找时间做了一个,仅供参考。本人运行过了。

Global site tag (gtag.js) - Google Analytics