java判断String数组中是否包含某个元素

String[] list = {"aaa","bbb","ccc"};

String str = "bbb";

if (Arrays.asList(list).contains(str)) {

    return true;

} else {

    return false;

}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc。 3.数据类型之间的转换 如何将数型字符转换为数字(Integer,Double) 如何将数字转换为字符 如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的最后一天 如何格式化日期 5.数组和集合 6.文件和目录(I/O)操作 如何列出某个目录下的所有文件 如何列出某个目录下的所有子目录 判断一个文件或目录是否存在 如何读写文件 7.Java多态的实现(继承、重载、覆盖) 8.编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中需要处理HTML标记时,应做什么样的处理,要筛选那些字符( & “”) 3.在JSP中如何读取客户端的请求,如何访问CGI变量,如何确定某个Jsp文件的真实路径。 4.描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。 5.列出Jsp中包含外部文件的方式,两者有何区别。 6.说明Jsp中errorPage的作用,应用范围。 7.介绍在Jsp中如何使用JavaBeans。 8.简单介绍JSP的标记库 9.Jsp和Servlet中的请求转发分别如何实现。 三、J2EE相关知识 1.介绍J2EE、J2SE、J2SE的区别。 2.J2EE是一种技术还是一种平台,他提供了那些技术。 3.什么是Application Server,它有什么功能和优点。 4.简单介绍连接池的优点和原理。 5.Web.xml的作用 四、其他 1.Web安全性的考虑(表单验证、浏览器Basic方式的验证,应用程序的安全性,SSL,代码考虑) 2.简单介绍您所了解的MVC。 3.简单介绍所了解的XML。 4.文档和编码规范 5.Java中的分页、效率考虑。 6.简单介绍您所了解的structs。 1.xml在项目中的作用 2.s-EJB 与 e-EJB的区别 3.会话面的作用 4.cmp与bmp的优缺点 5.j2me程序的必需的几个部分 6.c/s与b/s的区别 7.构建一个connect pool,然后再调用它, 8.j2ee平台与dotnet平台的区别 9.ejb的life cycle 10.session bean 和 entity bean的区别 11.ejb中的transaction机制 12.synchronized (生产者和消费) 13.StringStringBuffer 14.Serializable 15.MVC (Struts的工作流程) 16.什么是MDA 17.tcp与udp的区别 18.链表与散列表和数组的区别 19.堆和栈的区别 20.ejb的分类及区别 21.你对现在软件业以及国内软件业的看法 22.谈谈java多线程 23.谈谈文件加密技术 24.软件开发生命周期 25.路由协议种类及特点 26.java的awt和swing组件的GUI设计的关键 27.对于java流的认识 28.简单描述一下awt与swing区别。 29.简述java编程中事件处理模式。 30.你编写过applet吗?applet的安全权限如何?试列举java application或者applet中与servlet/jsp通信可以采用的方式。 31.简述逻辑操作(如&,|)与条件操作(如&&,||)的区别。 32.简述 Java Server Page 和 Servlet 的联系和区别。 33.简述synchronized和java.util.concurrent.locks.Lock的异同 ? 34.EJB规范规定EJB中禁止的操作有哪些? 35.java除了8种基本类型外,在虚拟机里还有哪一种,有什么作用? 36.除了使用new关键字创建对象意外,试列举另外三种以上创建实例的方式? 37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别? 38.列举三种以上垃圾回收算法,并比较其优缺点? 39.编写代码实现一个线程池 40.描述一下JVM加载class文件的原理机制? 41.试举例说明一个典型的垃圾回收算法? 42.请用java写二叉树算法,实现添加数据形成二叉树功能,并以先序的方式打印出来. 43.请写一个java程序实现线程连接池功能? 44.给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46.访问修饰符“public/private/protected/缺省的修饰符”的使用 47.用关键字final修饰一个类或者方法时,有何意义? 48.掌握类和对象的概念,掌握面向对象编程的本质 49.静态变量和静态方法的意义,如何引用一个类的静态变量或者静态方法? 50.JAVA语言如何进行异常处理,关键字:thorws,throw,try,catch,finally 51.Object类(或者其子类)的finalize()方法在什么情况下被调用? 52.一个“.java”原文件中是否可以包括多个类(不是内部类)? 53.掌握内部类和接口的概念 54.StringTokenizer类的使用 55.数据结构,如何遍历List中的元素? 如果要按照键保存或者访问数据,使用什么数据结构? 要掌握Collection相关的接口和类的使用 56.使用StringBuffer类与String类进行字符串连接时有何区别? 57.调用Thread类的destroy()方法有什么后果? 58.多线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 59.使用socket建立客户端与服务器的通信的过程 60.JAVA语言国际化应用,Locale类,Unicode 61.描述反射机制的作用 62.如何读写一个文件? 63.在图形界面中,一个按钮如何处理鼠标点击事件? 64.在图形界面中,一个表格,如何实现编辑单元格时弹出下拉框? 65.如何加载图片? 66.什么是模态对话框? 67.阐述MVC的概念 68.GUI布局管理器的使用,FlowLayout,BorderLayout,GridBagLayout 69.如何构造一棵树?选择树的一个节点时,如何得到这个节点? 70.向编辑框中输入字符时,如何控制只输入整数? 71.描述使用JDBC连接数据库的过程 72.EJB分为几类?什么是BMP,CMP? 73.什么是JNDI? 74.ADO是什么?ActiveX数据对象,是一个应用级程序接口. 75.四种JDBC方式?目前的版本? 76.EJB有哪几种?区别是什么? 77.JavaBean与EJB有什么区别? 78.软件开发生命周期有哪几个阶段? 79.软件开发有哪些因素? 80.软件开发中如何进行版本控制? 81.UML中,类视图如何表示类中的继承与聚合? 82.客户端游标与服务器端游标的区别? 83.动态游标与静态游标的区别? 84.dotnet由哪几个基本框架组成? 85.Oracle中SGA是什么? 86.web servers是什么? 87.UNIX中QT是什么意思? 88.在软件开发生命周期中的哪个阶段开始测试? 89.dotnet与J2EE的比较? 90.什么是ActiveX? 91.Java中IDL是什么? 92.ISO9000和CMM是什么?IS09000和CMM(软件能力成熟度模型)认证是国际上通用的软件质量评估方法.CMM的五个成熟度等级。 第一,谈谈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, ConcurrentModificationException, 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的。 一般认为第一种形式要更加安全些 ---- Java面试题和答案 (http://www.bioon.net/dispbbs.asp?boardid=169&id=108010) -- 作者:jiajia1983 -- 发布时间:2005-3-9 17:29:00 -- Java面试题和答案 JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省。对象引用实例变量的缺省为 null,而原始类型实例变量的缺省与它们的类型有关。 4、StringStringBuffer的区别 JAVA平台提供了两个类:StringStringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。 5、运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 7、说出ArrayList,Vector, LinkedList的存储性能和特性 ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。 SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。 对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。 Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体。Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method。换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行。从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。 9、Collection 和 Collections的区别。   Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 11、HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。 12、final, finally, finalize的区别。   final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。
写一个函数,例如:给你的 a b c 则输出 abc acb bac bca cab cba import java.util.ArrayList; import java.util.List; public class NumTest { public static void main(String[] args) { String s="ABCD";//原字符串 List<String> result = list(s, "");//列出字符的组合,放入result System.out.println(result.size());; System.out.println(result); } /** * 列出基础字符串(base)的所有组合 * @param base 以该字符串作为基础字符串,进行选择性组合。 * @param buff 所求字符串的临时结果 * @param result 存放所求结果 */ public static List<String> list(String base,String buff){ List<String> result = new ArrayList<String>();//存放结果信息。 if(base.length()<=0){ result.add(buff); } for(int i=0;i<base.length();i++){ List<String> temp = list(new StringBuilder(base).deleteCharAt(i).toString(),buff+base.charAt(i)); result.addAll(temp); } return result; } } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ public static void main(String[] args) { String s="ABCD";//原字符串 List<String> result = new ArrayList<String>();//存放结果信息。 list(s, "", result);//列出字符的组合,放入result System.out.println(result.size());; System.out.println(result); } /** * 列出基础字符串(base)的所有组合 * @param base 以该字符串作为基础字符串,进行选择性组合。 * @param buff 所求字符串的临时结果 * @param result 存放所求结果 */ public static void list(String base,String buff,List<String> result){ if(base.length()<=0){ result.add(buff); } for(int i=0;i<base.length();i++){ list(new StringBuilder(base).deleteCharAt(i).toString(),buff+base.charAt(i),result); } } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 写一个函数,给你一个字符串 倒序输出来 public String getString(String str){ if(str!=null){ String newStr = ""; for(int i=0;i<str.length();i++) { char c = str.charAt(str.length()-1-i); newStr = newStr + c; } return newStr; }else{ return null; } } 不使用中间变量 把两个变量的互换 int a=10; int b=100; a=a*b; b=a/b; a=a/b; System.out.print("a="+a+" b="+b); 折半查找 public class Test { public static int[] data = { 12, 15, 20, 10, 19, 3, 89, 32, 39, 47, 55 }; // 原始数据 public static int counter = 1; // 计数器 public static int len = data.length; public static void main(String args[]) { //要查找的数 int keyValue = 89; Test t = new Test(); boolean b = t.BinarySearch(keyValue); if(b) { // 输出查找次数 System.out.println("Search Time = " + counter); }else { // 输出没有找到数据 System.out.println("No Found!!"); } } // --------------------------------------------------- // 折半查找法 public static boolean BinarySearch(int keyValue) { int left; // 左边界变量 int right; // 右边界变量 int middle; // 中位数变量 System.out.println("数据长度:"+len); left = 0; right = len - 1; while (left <= right) { //由于源数据不是顺序的,需先进行排序 int temp; for(int i=0;i<data.length;++i) { for(int j=0;j<data.length-i-1;++j) { if(data[j]>data[j+1]) { temp = data[j]; data[j] = data[j+1]; data[j+1] = temp; } } } middle = (left + right) / 2; // 欲查找较小 if (keyValue < data[middle]) { right = middle - 1; // 查找前半段 } // 欲查找较大 else if (keyValue > data[middle]) { left = middle + 1; // 查找后半段 } // 查找到数据 else if (keyValue == data[middle]) { System.out.println("data[" + middle + "] = " + data[middle]); return true; } counter++; } return false; } } 1. 将this is a test 转化为This Is A Test String str="this is a man"; char c[]=new char[str.length()]; str.getChars(0,str.length(),c,0); if(c[0]>='a'&&c[0]<='z') { c[0]=(char)(c[0]-32); } for(int i=1;i<=c.length-1;i++) { if(c[i]==' ') { c[i+1]=(char)(c[i+1]-32); } } str=new String(c); System.out.print(str); 2. 将This is a test倒着输出tset a si sihT (用StringBuffer) String str="this is a man"; StringBuffer sb=new StringBuffer(str.length()); for(int j = str.length()-1;j>=0;j--) { sb.append(str.charAt(j)); } System.out.print(sb); 3. 用递归求N!=N*(N-1)*(N-2)*...*2*1; long digui(int i) {if(i==0||i==1) { return 1; } else { return i*digui(i-1); } } 4. 写一个单例模式(遇到两次) public class Test { private Test(){} private static Test test; public static Test getInstance() { if(test==null) { test = new Test(); } return test; }} 5. //统计字符串的个数 "I'm go to swimming" // I:1 // ':1 // m:3 // 空格:3 // g:2// ... String str = "I'm go to swimming"; Set<String> set = new HashSet<String>(); for(int i=0;i<str.length();i++){ String s = str.substring(i,i+1); set.add(s); } Iterator it = set.iterator(); while(it.hasNext()) { String sr =(String)it.next(); int k=0; for(int j=0;j<str.length();j++){ if(sr.equals(str.substring(j,j+1))){ k++; } } System.out.println(s + "有" + k + "个"); } 6. 对字母进行排序,如:s,a,g,d,b; String s = "sagdb"; List t = new ArrayList(); for(int i=0;i<s.length();i++) { String xx = s.substring(i,i+1); t.add(xx); } java.util.Collections.sort(t); System.out.println(t); 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 public class lianxi01 { 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); }}} 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 public class lianxi02 { 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); }} 【程序3】 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。 public class lianxi03 { 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+"是一个水仙花数"); } }}} 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*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 lianxi04{ 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++; } } } 【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 import java.util.*; public class lianxi05 { 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); }} 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 /**在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。* / import java.util.*; public class lianxi06 { 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; }} 【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 import java.util.*; public class lianxi07 { public static void main(String[] args) { int digital = 0; int character = 0; int other = 0; int blank = 0; char[] ch = null; Scanner sc = new Scanner(System.in); String s = sc.nextLine(); ch = s.toCharArray(); for(int i=0; i<ch.length; i++) { if(ch >= '0' && ch <= '9') { digital ++; } else if((ch >= 'a' && ch <= 'z') || ch > 'A' && ch <= 'Z') { character ++; } else if(ch == ' ') { blank ++; } else { other ++; } } System.out.println("数字个数: " + digital); System.out.println("英文字母个数: " + character); System.out.println("空格个数: " + blank); System.out.println("其他字符个数:" + other ); }} 【程序8】 题目:求s=a+aa+aaa+aaaa+aa...a的,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 import java.util.*; public class lianxi08 { 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); }} 【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。 public class lianxi09 { public static void main(String[] args) { System.out.println("1到1000的完数有: "); for(int i=1; i<1000; i++) { int t = 0; for(int j=1; j<= i/2; j++) { if(i % j == 0) { t = t + j; } } if(t == i) { System.out.print(i + " "); } }} 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? public class lianxi10 { public static void main(String[] args) { double h = 100,s = 100; for(int i=1; i<10; i++) { s = s + h; h = h / 2; } System.out.println("经过路程:" + s); System.out.println("反弹高度:" + h / 2); }} 【程序11】 题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? public class lianxi11 { public static void main(String[] args) { int count = 0; for(int x=1; x<5; x++) { for(int y=1; y<5; y++) { for(int z=1; z<5; z++) { if(x != y && y != z && x != z) { count ++; System.out.println(x*100 + y*10 + z ); } } } } System.out.println("共有" + count + "个三位数"); }} 【程序12】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数? import java.util.*; public class lianxi12 { public static void main(String[] args) { double x = 0,y = 0; System.out.print("输入当月利润(万):"); Scanner s = new Scanner(System.in); x = s.nextInt(); if(x > 0 && x <= 10) { y = x * 0.1; } else if(x > 10 && x <= 20) { y = 10 * 0.1 + (x - 10) * 0.075; } else if(x > 20 && x <= 40) { y = 10 * 0.1 + 10 * 0.075 + (x - 20) * 0.05; } else if(x > 40 && x <= 60) { y = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (x - 40) * 0.03; } else if(x > 60 && x <= 100) { y = 20 * 0.175 + 20 * 0.05 + 20 * 0.03 + (x - 60) * 0.015; } else if(x > 100) { y = 20 * 0.175 + 40 * 0.08 + 40 * 0.015 + (x - 100) * 0.01; } System.out.println("应该提取的奖金是 " + y + "万"); }} 【程序13】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? public class lianxi13 { public static void main(String[] args) { for(int x =1; x<100000; x++) { if(Math.sqrt(x+100) % 1 == 0) { if(Math.sqrt(x+268) % 1 == 0) { System.out.println(x + "加100是一个完全平方数,再加168又是一个完全平方数"); } } }}} /*按题意循环应该从-100开始(整数包括正整数、负整数、零),这样会多一个满足条件的数-99。 但是我看到大部分人解这道题目时都把题中的“整数”理解成正整数,我也就随大流了。*/ 【程序14】 题目:输入某年某月某日,判断这一天是这一年的第几天? import java.util.*; public class lianxi14 { public static void main(String[] args) { int year, month, day; int days = 0; int d = 0; int e; input fymd = new input(); do { e = 0; System.out.print("输入年:"); year =fymd.input(); System.out.print("输入月:"); month = fymd.input(); System.out.print("输入天:"); day = fymd.input(); if (year < 0 || month < 0 || month > 12 || day < 0 || day > 31) { System.out.println("输入错误,请重新输入!"); e=1 ; } }while( e==1); for (int i=1; i <month; i++) { switch (i) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) { days = 29; } else { days = 28; } break; } d += days; } System.out.println(year + "-" + month + "-" + day + "是这年的第" + (d+day) + "天。"); } } class input{ public int input() { int value = 0; Scanner s = new Scanner(System.in); value = s.nextInt(); return value; }} 【程序15】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 import java.util.*; public class lianxi15 { public static void main(String[] args) { input fnc = new input(); int x=0, y=0, z=0; System.out.print("输入第一个数字:"); x = fnc.input(); System.out.print("输入第二个数字:"); y = fnc.input(); System.out.print("输入第三个数字:"); z = fnc.input(); if(x > y) { int t = x; x = y; y = t; } if(x > z) { int t = x; x = z; z = t; } if(y > z) { int t = y; y = z; z = t; } System.out.println( "三个数字由小到大排列为: "+x + " " + y + " " + z); } } class input{ public int input() { int value = 0; Scanner s = new Scanner(System.in); value = s.nextInt(); return value; }} 【程序16】 题目:输出9*9口诀。 public class lianxi16 { public static void main(String[] args) { for(int i=1; i<10; i++) { for(int j=1; j<=i; j++) { System.out.print(j + "*" + i + "=" + j*i + " " ); if(j*i<10){System.out.print(" ");} } System.out.println(); } }} 【程序17】 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 public class lianxi17 { public static void main(String[] args) { int x = 1; for(int i=2; i<=10; i++) { x = (x+1)*2; } System.out.println("猴子第一天摘了 " + x + " 个桃子"); }} 【程序18】 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 public class lianxi18 { static char[] m = { 'a', 'b', 'c' }; static char[] n = { 'x', 'y', 'z' }; public static void main(String[] args) { for (int i = 0; i < m.length; i++) { for (int j = 0; j < n.length; j++) { if (m[i] == 'a' && n[j] == 'x') { continue; } else if (m[i] == 'a' && n[j] == 'y') { continue; } else if ((m[i] == 'c' && n[j] == 'x') || (m[i] == 'c' && n[j] == 'z')) { continue; } else if ((m[i] == 'b' && n[j] == 'z') || (m[i] == 'b' && n[j] == 'y')) { continue; } else System.out.println(m[i] + " vs " + n[j]); } } } } 【程序19】 题目:打印出如下图案(菱形) * *** ***** ******* ***** *** * public class lianxi19 { public static void main(String[] args) { int H = 7, W = 7;//高和宽必须是相等的奇数 for(int i=0; i<(H+1) / 2; i++) { for(int j=0; j<W/2-i; j++) { System.out.print(" "); } for(int k=1; k<(i+1)*2; k++) { System.out.print('*'); } System.out.println(); } for(int i=1; i<=H/2; i++) { for(int j=1; j<=i; j++) { System.out.print(" "); } for(int k=1; k<=W-2*i; k++) { System.out.print('*'); } System.out.println(); } }} 【程序20】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 public class lianxi20 { public static void main(String[] args) { int x = 2, y = 1, t; double sum = 0; for(int i=1; i<=20; i++) { sum = sum + (double)x / y; t = y; y = x; x = y + t; } System.out.println("前20项相加之和是: " + sum); }} 【程序21】 题目:求1+2!+3!+...+20!的和 public class lianxi21 { public static void main(String[] args) { long sum = 0; long fac = 1; for(int i=1; i<=20; i++) { fac = fac * i; sum += fac; } System.out.println(sum); }} 【程序22】 题目:利用递归方法求5!。 public class lianxi22 { public static void main(String[] args) { int n = 5; rec fr = new rec(); System.out.println(n+"! = "+fr.rec(n)); } } class rec{ public long rec(int n) { long value = 0 ; if(n ==1 ) { value = 1; } else { value = n * rec(n-1); } return value; }} 【程序23】 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? public class lianxi23 { public static void main(String[] args) { int age = 10; for(int i=2; i<=5; i++) { age =age+2; } System.out.println(age); }} 【程序24】 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 //使用了长整型最多输入18位 import java.util.*; public class lianxi24 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入一个正整数:"); long a = s.nextLong(); String ss = Long.toString(a); char[] ch = ss.toCharArray(); int j=ch.length; System.out.println(a + "是一个"+ j +"位数。"); System.out.print("按逆序输出是:"); for(int i=j-1; i>=0; i--) { System.out.print(ch[i]); } } } 【程序25】 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 import java.util.*; public class lianxi25 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int a; do{ System.out.print("请输入一个5位正整数:"); a = s.nextInt(); }while(a<10000||a>99999); String ss =String.valueOf(a); char[] ch = ss.toCharArray(); if(ch[0]==ch[4]&&ch[1]==ch[3]){ System.out.println("这是一个回文数");} else {System.out.println("这不是一个回文数");} } } //这个更好,不限位数 import java.util.*; public class lianxi25a { public static void main(String[] args) { Scanner s = new Scanner(System.in); boolean is =true; System.out.print("请输入一个正整数:"); long a = s.nextLong(); String ss = Long.toString(a); char[] ch = ss.toCharArray(); int j=ch.length; for(int i=0; i<j/2; i++) { if(ch[i]!=ch[j-i-1]){is=false;} } if(is==true){System.out.println("这是一个回文数");} else {System.out.println("这不是一个回文数");} } } 【程序26】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 import java.util.*; public class lianxi26 { public static void main(String[] args) { getChar tw = new getChar(); System.out.println("请输入星期的第一个大写字母:"); char ch = tw.getChar(); switch(ch) { case 'M': System.out.println("Monday"); break; case 'W': System.out.println("Wednesday"); break; case 'F': System.out.println("Friday"); break; case 'T': { System.out.println("请输入星期的第二个字母:"); char ch2 = tw.getChar(); if(ch2 == 'U') {System.out.println("Tuesday"); } else if(ch2 == 'H') {System.out.println("Thursday"); } else {System.out.println("无此写法!"); } }; break; case 'S': { System.out.println("请输入星期的第二个字母:"); char ch2 = tw.getChar(); if(ch2 == 'U') {System.out.println("Sunday"); } else if(ch2 == 'A') {System.out.println("Saturday"); } else {System.out.println("无此写法!"); } }; break; default:System.out.println("无此写法!"); } } } class getChar{ public char getChar() { Scanner s = new Scanner(System.in); String str = s.nextLine(); char ch = str.charAt(0); if(ch<'A' || ch>'Z') { System.out.println("输入错误,请重新输入"); ch=getChar(); } return ch; }} 【程序27】 题目:求100之内的素数 //使用除sqrt(n)的方法求出的素数不包括2和3 public class lianxi27 { public static void main(String[] args) { boolean b =false; System.out.print(2 + " "); System.out.print(3 + " "); for(int i=3; i<100; i+=2) { for(int j=2; j<=Math.sqrt(i); j++) { if(i % j == 0) {b = false; break; } else{b = true;} } if(b == true) {System.out.print(i + " ");} } } } //该程序使用除1位素数得2位方法,运行效率高通用性差。 public class lianxi27a { public static void main(String[] args) { int[] a = new int[]{2, 3, 5, 7}; for(int j=0; j<4; j++)System.out.print(a[j] + " "); boolean b =false; for(int i=11; i<100; i+=2) { for(int j=0; j<4; j++) { if(i % a[j] == 0) {b = false; break; } else{b = true;} } if(b == true) {System.out.print(i + " ");} } } } 【程序28】 题目:对10个数进行排序 import java.util.*; public class lianxi28 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int[] a = new int[10]; System.out.println("请输入10个整数:"); for(int i=0; i<10; i++) { a[i] = s.nextInt(); } for(int i=0; i<10; i++) { for(int j=i+1; j<10; j++) { if(a[i] > a[j]) { int t = a[i]; a[i] = a[j]; a[j] = t; } } } for(int i=0; i<10; i++) { System.out.print(a[i] + " "); } } } 【程序29】 题目:求一个3*3矩阵对角线元素之和 import java.util.*; public class lianxi29 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int[][] a = new int[3][3]; System.out.println("请输入9个整数:"); for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { a[i][j] = s.nextInt(); } } System.out.println("输入的3 * 3 矩阵是:"); for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { System.out.print(a[i][j] + " "); } System.out.println(); } int sum = 0; for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { if(i == j) { sum += a[i][j]; } } } System.out.println("对角线之和是:" + sum); }} 【程序30】 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 //此程序不好,没有使用折半查找插入 import java.util.*; public class lianxi30 { public static void main(String[] args) { int[] a = new int[]{1, 2, 6, 14, 25, 36, 37,55}; int[] b = new int[a.length+1]; intt1=0,t=0; int i =0; Scanner s= new Scanner(System.in); System.out.print("请输入一个整数:"); int num = s.nextInt(); if(num >= a[a.length-1]) { b[b.length-1] = num; for(i=0; i<a.length; i++) { b[i] = a[i]; } } else { for(i=0; i<a.length; i++) { if(num >= a[i]) { b[i] = a[i]; } else { b[i] = num; break; } } for(int j=i+1; j<b.length; j++) { b[j] = a[j-1]; } } for (i = 0; i < b.length; i++) { System.out.print(b[i] + " "); }} } 【程序31】 题目:将一个数组逆序输出。 import java.util.*; public class lianxi31 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int a[] = new int[20]; System.out.println("请输入多个正整数(输入-1表示结束):"); int i=0,j; do{ a[i]=s.nextInt(); i++; }while (a[i-1]!=-1); System.out.println("你输入的数组为:"); for( j=0; j<i-1; j++) { System.out.print(a[j]+" "); } System.out.println("\n数组逆序输出为:"); for( j=i-2; j>=0; j=j-1) { System.out.print(a[j]+" "); } } } 【程序32】 题目:取一个整数a从右端开始的4~7位。 import java.util.*; public class lianxi32 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入一个7位以上的正整数:"); long a = s.nextLong(); String ss = Long.toString(a); char[] ch = ss.toCharArray(); int j=ch.length; if (j<7){System.out.println("输入错误!");} else { System.out.println("截取从右端开始的4~7位是:"+ch[j-7]+ch[j-6]+ch[j-5]+ch[j-4]); } } } 【程序33】 题目:打印出杨辉三角形(要求打印出10行如下图) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ………… public class lianxi33 { public static void main(String[] args) { int[][] a = new int[10][10]; for(int i=0; i<10; i++) { a[i][i] = 1; a[i][0] = 1; } for(int i=2; i<10; i++) { for(int j=1; j<i; j++) { a[i][j] = a[i-1][j-1] + a[i-1][j]; } } for(int i=0; i<10; i++) { for(int k=0; k<2*(10-i)-1; k++) { System.out.print(" "); } for(int j=0; j<=i; j++) { System.out.print(a[i][j] + " "); } System.out.println(); } }} 【程序34】 题目:输入3个数a,b,c,按大小顺序输出。 import java.util.Scanner; public class lianxi34 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("请输入3个整数:"); int a = s.nextInt(); int b = s.nextInt(); int c = s.nextInt(); if(a < b) { int t = a; a = b; b = t; } if(a < c) { int t = a; a = c; c = t; } if(b < c) { int t = b; b = c; c = t; } System.out.println("从大到小的顺序输出:"); System.out.println(a + " " + b + " " + c); }} 【程序35】 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 import java.util.*; public class lianxi35 { public static void main(String[] args) { int N = 8; int[] a = new int [N]; Scanner s = new Scanner(System.in); int idx1 = 0, idx2 = 0; System.out.println("请输入8个整数:"); for(int i=0; i<N; i++) { a[i] = s.nextInt(); } System.out.println("你输入的数组为:"); for(int i=0; i<N; i++) { System.out.print(a[i] + " "); } int max =a[0], min = a[0]; for(int i=0; i<N; i++) { if(a[i] > max) { max = a[i]; idx1 = i; } if(a[i] < min) { min = a[i]; idx2 = i; } } if(idx1 != 0) { int temp = a[0]; a[0] = a[idx1]; a[idx1] = temp; } if(idx2 != N-1) { int temp = a[N-1]; a[N-1] = a[idx2]; a[idx2] = temp; } System.out.println("\n交换后的数组为:"); for(int i=0; i<N; i++) { System.out.print(a[i] + " "); } }} 【程序36】 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 import java.util.Scanner; public class lianxi36 { public static void main(String[] args) { int N =10; int[] a = new int[N]; Scanner s = new Scanner(System.in); System.out.println("请输入10个整数:"); for(int i=0; i<N; i++) { a[i] = s.nextInt(); } System.out.print("你输入的数组为:"); for(int i=0; i<N; i++) { System.out.print(a[i] + " "); } System.out.print("\n请输入向后移动的位数:"); int m = s.nextInt(); int[] b = new int[m]; for(int i=0; i<m; i++) { b[i] = a[N-m+i]; } for(int i=N-1; i>=m; i--) { a[i] = a[i-m]; } for(int i=0; i<m; i++) { a[i] = b[i]; } System.out.print("位移后的数组是:"); for(int i=0; i<N; i++) { System.out.print(a[i] + " "); } }} 【程序37】 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 import java.util.Scanner; public class lianxi37 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入排成一圈的人数:"); int n = s.nextInt(); boolean[] arr = new boolean[n]; for(int i=0; i<arr.length; i++) { arr[i] = true; } int leftCount = n; int countNum = 0; int index = 0; while(leftCount > 1) { if(arr[index] == true) { countNum ++; if(countNum == 3) { countNum =0; arr[index] = false; leftCount --; } } index ++; if(index == n) { index = 0; } } for(int i=0; i<n; i++) { if(arr[i] == true) { System.out.println("原排在第"+(i+1)+"位的人留下了。"); } } }} 【程序38】 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 /*……………… *……题目意思似乎不能用length()函数 */ import java.util.*; public class lianxi38 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("请输入一个字符串:"); String str = s.nextLine(); System.out.println("字符串的长度是:"+str.length()); } } 【程序39】 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) //没有利用指针函数 import java.util.*; public class lianxi39 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入一个正整数 n= "); int n = s.nextInt(); System.out.println("相应数列的和为:" + sum(n)); } public static double sum(int n) { double res = 0; if(n % 2 == 0) { for(int i=2; i<=n; i+=2) { res += (double)1 / i; } } else { for(int i=1; i<=n; i+=2) { res += (double)1 / i ; } } return res; } } 【程序40】 题目:字符串排序。 public class lianxi40 { public static void main(String[] args) { int N=5; String temp = null; String[] s = new String[N]; s[0] = "matter"; s[1] = "state"; s[2] = "solid"; s[3] = "liquid"; s[4] = "gas"; for(int i=0; i<N; i++) { for(int j=i+1; j<N; j++) { if(compare(s[i], s[j]) == false) { temp = s[i]; s[i] = s[j]; s[j] = temp; } } } for(int i=0; i<N; i++) { System.out.println(s[i]); } } static boolean compare(String s1, String s2) { boolean result = true; for(int i=0; i<s1.length() && i<s2.length(); i++) { if(s1.charAt(i) > s2.charAt(i)) { result = false; break; } else if(s1.charAt(i) <s2.charAt(i)) { result = true; break; } else { if(s1.length() < s2.length()) { result = true; } else { result = false; } } } return result; }} 【程序41】 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? public class lianxi41 { public static void main (String[] args) { int i,m,j=0,k,count; for(i=4;i<10000;i+=4) { count=0; m=i; for(k=0;k<5;k++) { j=i/4*5+1; i=j; if(j%4==0) count++; else break; } i=m; if(count==4) {System.out.println("原有桃子 "+j+" 个"); break;} } } } 【程序42】 题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。 //题目错了!809x=800x+9x+1 这样的方程无解。去掉那个1就有解了。 public class lianxi42 { public static void main (String[] args) { int a=809,b,i; for(i=10;i<13;i++) {b=i*a ; if(8*i<100&&9*i>=100) System.out.println ("809*"+i+"="+"800*"+i+"+"+"9*"+i+"="+b);} }} 【程序43】 题目:求0—7所能组成的奇数个数。 //组成1位数是4个。 //组成2位数是7*4个。 //组成3位数是7*8*4个。 //组成4位数是7*8*8*4个。 //...... public class lianxi43 { public static void main (String[] args) { int sum=4; int j; System.out.println("组成1位数是 "+sum+" 个"); sum=sum*7; System.out.println("组成2位数是 "+sum+" 个"); for(j=3;j<=9;j++){ sum=sum*8; System.out.println("组成"+j+"位数是 "+sum+" 个"); }}} 【程序44】 题目:一个偶数总能表示为两个素数之和。 //由于用除sqrt(n)的方法求出的素数不包括2和3, //因此在判断是否是素数程序中人为添加了一个3。 import java.util.*; public class lianxi44 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n,i; do{ System.out.print("请输入一个大于等于6的偶数:"); n = s.nextInt(); } while(n<6||n%2!=0); //判断输入是否是>=6偶数,不是,重新输入 fun fc = new fun(); for(i=2;i<=n/2;i++){ if((fc.fun(i))==1&&(fc.fun(n-i)==1)) {int j=n-i; System.out.println(n+" = "+i+" + "+j); } //输出所有可能的素数对 } } } class fun{ public int fun (int a) //判断是否是素数的函数 { int i,flag=0; if(a==3){flag=1;return(flag);} for(i=2;i<=Math.sqrt(a);i++){ if(a%i==0) {flag=0;break;} else flag=1;} return (flag) ;//不是素数,返回0,是素数,返回1 }} //解法二 import java.util.*; public class lianxi44 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n; do{ System.out.print("请输入一个大于等于6的偶数:"); n = s.nextInt(); } while(n<6||n%2!=0); //判断输入是否是>=6偶数,不是,重新输入 for(int i=3;i<=n/2;i+=2){ if(fun(i)&&fun(n-i)) { System.out.println(n+" = "+i+" + "+(n-i)); } //输出所有可能的素数对 } } static boolean fun (int a){ //判断是否是素数的函数 boolean flag=false; if(a==3){flag=true;return(flag);} for(int i=2;i<=Math.sqrt(a);i++){ if(a%i==0) {flag=false;break;} else flag=true;} return (flag) ; }} 【程序45】 题目:判断一个素数能被几个9整除 //题目错了吧?能被9整除的就不是素数了!所以改成整数了。 import java.util.*; public class lianxi45 { public static void main (String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入一个整数:"); int num = s.nextInt(); int tmp = num; int count = 0; for(int i = 0 ; tmp%9 == 0 ;){ tmp = tmp/9; count ++; } System.out.println(num+" 能够被 "+count+" 个9整除。"); } } 【程序46】 题目:两个字符串连接程序 import java.util.*; public class lianxi46 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入一个字符串:"); String str1 = s.nextLine(); System.out.print("请再输入一个字符串:"); String str2 = s.nextLine(); String str = str1+str2; System.out.println("连接后的字符串是:"+str); } } 【程序47】 题目:读取7个数(1—50)的整数,每读取一个,程序打印出该个数的*。 import java.util.*; public class lianxi47 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n=1,num; while(n<=7){ do{ System.out.print("请输入一个1--50之间的整数:"); num= s.nextInt(); }while(num<1||num>50); for(int i=1;i<=num;i++) {System.out.print("*"); } System.out.println(); n ++; }}} 【程序48】 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 import java.util.*; public class lianxi48 { public static void main(String args[]) { Scanner s = new Scanner(System.in); int num=0,temp; do{ System.out.print("请输入一个4位正整数:"); num = s.nextInt(); }while (num<1000||num>9999); int a[]=new int[4]; a[0] = num/1000; //取千位的数字 a[1] = (num/100); //取百位的数字 a[2] = (num/10); //取十位的数字 a[3] = num; //取个位的数字 for(int j=0;j<4;j++) { a[j]+=5; a[j]%=10; } for(int j=0;j<=1;j++) { temp = a[j]; a[j] = a[3-j]; a[3-j] =temp; } System.out.print("加密后的数字为:"); for(int j=0;j<4;j++) System.out.print(a[j]); } } 【程序49】 题目:计算字符串中子串出现的次数 import java.util.*; public class lianxi49 { public static void main(String args[]){ Scanner s = new Scanner(System.in); System.out.print("请输入字符串:"); String str1 = s.nextLine(); System.out.print("请输入子串:"); String str2 = s.nextLine(); int count=0; if(str1.equals("")||str2.equals("")) { System.out.println("你没有输入字符串或子串,无法比较!"); System.exit(0); } else { for(int i=0;i<=str1.length()-str2.length();i++) { if(str2.equals(str1.substring(i, str2.length()+i))) //这种比法有问题,会把"aaa"看成有2个"aa"子串。 count++; } System.out.println("子串在字符串中出现: "+count+" 次"); } }} 【程序50】 题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,把原有的数据和计算出的平均分数存放在磁盘文件 "stud "中。 public class lianxi50 { public static void main(String[] args){ Scanner ss = new Scanner(System.in); String [][] a = new String[5][6]; for(int i=1; i<6; i++) { System.out.print("请输入第"+i+"个学生的学号:"); a[i-1][0] = ss.nextLine(); System.out.print("请输入第"+i+"个学生的姓名:"); a[i-1][1] = ss.nextLine(); for(int j=1; j<4; j++) { System.out.print("请输入该学生的第"+j+"个成绩:"); a[i-1][j+1] = ss.nextLine(); } System.out.println("\n"); } //以下计算平均分 float avg; int sum; for(int i=0; i<5; i++) { sum=0; for(int j=2; j<5; j++) { sum=sum+ Integer.parseInt(a[i][j]); } avg= (float)sum/3; a[i][5]=String.valueOf(avg); } //以下写磁盘文件 String s1; try { File f = new File("C:\\stud"); if(f.exists()){ System.out.println("文件存在"); }else{ System.out.println("文件不存在,正在创建文件"); f.createNewFile();//不存在则创建 } BufferedWriter output = new BufferedWriter(new FileWriter(f)); for(int i=0; i<5; i++) { for(int j=0; j<6; j++) { s1=a[i][j]+"\r\n"; output.write(s1); } } output.close(); System.out.println("数据已写入c盘文件stud中!"); } catch (Exception e) { e.printStackTrace(); } }} 第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大 public class A1 { public static void main(String [] args) { System.out.println(computeAge(8)); } public static int computeAge(int n) { if(n==1) return 10; return computeAge(n-1) + 2; } } public static void toBinary(int n,StringBuffer result) { if(n/2 != 0) toBinary(n/2,result); result.append(n%2); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值