问一下关于javajava面试的问题题,

本帖子已过去太久远了,不再提供回复功能。我想问一下
没有好学与难学之分,感兴趣就能学好
php 容易上手,互联网时代催生了php技术,java已经有很多年的发展,积累的人才前辈很多,新手在Php上更有作为
1. i++ 就是i使用后,加1.
2. i+=1 是 i = i + 1
很多人看到IT行业迅猛发展,想来分一杯羹。但是由于时间成本较高,很多人不想按部就班来学习Java,他们急切想学好Java快速从事相关行业。于是Java速成成了他...
不很明白你的什么意思?
你是要播放声音文件吗?
如果是,你需要使用sun.audio.AudioP 类
具体的用法看看doc文件
万网java主机支持javamail应用。但需要您自己将相关jar文件(如:javamail1_1_3.zip解开的文件mail.jar)上传到htdocs/w...
维斯岛Studio Rukavac 8863a好吗?是否值得入住?
答: 这个要设计到JNI的开发,就是用Java来调用C语言的函数库,还要编写缓冲器来解决传输问题,还有就是网络协议一定要了解,做的时候要用多线程来控制你所有的缓冲器,...
答: 所谓的网络编程,不论c还是java,本质上都是通过socket进行数据传输;
一般情况下可以使用的传输协议有tcp、udp、ftp等等,这些协议为网络变成提供...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区10:26 提问
关于java数组的问题,想来这边问一下
首先是这样子的,我们作业时是一个打地鼠的小程序,模拟地鼠出现的样子。
我是先设定一个4x4的数组Array[4][4],数组默认值全部设定为0.
然后设定两个随机变量row和col,范围都在0-3之间
然后把Array[row][col]的值从设定为1,以表示地鼠出现的位置。
那接下来就是我想要问的地方;
如何把出现过的位置舍弃,就是希望接下来随机的row和col不要再重复出现同样的数字?
下面是代码片段
int i = new Random().nextInt(4);
int j = new Random().nextInt(4);
GameArray[i][j] = 1; //Susliks appears
for (int index = 0; index & 4; index++){
for (int index2 = 0; index2 & 4; index2++){
if ( GameArray[index][index2] == 1){
System.out.print("o ");
System.out.print("x ");
System.out.println();
因为要求是所有的位置都出现过1就结束程序。而我这样子每次循环都要上百次才能结束,所以我想问有没有什么办法可以控制循环次数在一定的范围内?比方说就是已经出现过的数组索引值就不再使用(比如说GameArray[3][3] = 1,那么接下来希望的随机不要再出现[3][3]这样子,如果出现了就跳出index的 for循环体,重新下一次随机)有没有什么办法可以实现?我刚接触java的,好多都还不清楚
按赞数排序
你的问题有两个:1、出现的位置不允许再出现
2、当所有的位置都为1的时候,程序完成(地鼠已经去过所有的地洞,而且没有重复)。
如果你的问题是这样的话,答案如下:
整个的思路:有一个地鼠类,地鼠类里面有一个创造位置的方法(跑的位置),方法是这样实现的:
地鼠跑到一个位置的时候,将其位置赋给burrows数组且将值赋1,如果随机产生的位置是重复的话,那么就要检查burrows数组里的值是否都
为1(地鼠跑过)。当然在检查的过程中,有地鼠没有跑过的(值为0),那么就要把值赋给rowIndex和colIndex,这是整个说明。
注意事项:里面安全性还需自己验证
import java.util.R
public class Suslik {
* 随机跑到位置
* @param row 跑的范围的横坐标
* @param col 跑的范围的纵坐标
public void createPosition(int row,int col){
int [][] burrows
= new int[row][col];
Random creatNum = new Random();
boolean index =
while(!index){
rowIndex = creatNum.nextInt(row);
colIndex = creatNum.nextInt(col);
int sum = 0;
if(burrows[rowIndex][colIndex] != 0){
for(int m = 0;m&m++){
for(int n = 0;n&n++){
if(burrows[m][n] == 0){
rowIndex =
colIndex =
if(sum !=0){
burrows[rowIndex][colIndex] = 1;
System.out.println("row:"+rowIndex+" ,col:"+colIndex);
public static void main(String [] args){
new Suslik().createPosition(4, 4);
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!
可以在声明一个同样的数组,记录对应位置是否出现过
首先,你随机数的用法不对,要这样:
Random r=new Random();
以后每次这样,不要每次生成新的
r.nextInt();
然后,当发现随机数已经被占用,最简单的方法就是以此位置向后找一个未被占用的即可,
weizhi nextweizhi(int x,int y)
提供本次随机位置x,y,方法寻找x,y或之后第一个未被占用的位置,返回
ArrayList list = new ArrayList();
int n = 10;
Random rand = new Random();
boolean[] bool = new boolean[n];
int num = 0;
for (int i = 0; i & i++) {
num = rand.nextInt(n);
} while (bool[num]);
bool[num] =
list.add(num);
其他相似问题java工程师面试官一般提出的十大问题? 聘JAVA工程师,面试官常问一些什_微博生活网
你目前正在浏览:& > &
java工程师面试官一般提出的十大问题?
java工程师面试官一般提出的十大问题?
可能问一下通用的问题,会不会SSH,java面向对象的特点做过什么项目,写一个排序算法,学java多久,压力面试的话
java工程师面试官一般提出的十大问题? ……
做过什么项目,java面向对象的特点,写一个排序算法,学java多久,会不会SSH,压力面试的话,可...问个我老板问的问题:技术部等java开发工程师等的花都谢了,你有什么想法?现在心情很郁闷,求安慰啊?... ……
问个我老板问的问题:技术部等java开发工程师等的花都谢了,你有什么想法?......现在Java 技术面试,都喜欢提点什么问题 ……
采纳率:36% 来自团队:JAVA时空 擅长: 笔记本电脑 校园生活 工程技术科学 诗歌...201...面试java实施工程师的时候,一般会问那些问题?求问题和答案。 ……
这个分有经验 和 无经验的 有经验一般会问曾经做过的项目 用到的哪些技术 个人能力 无经验的就问的很...一般企业级项目开发,用到java自带排序算法的机会多吗? ……
java二分排序算法是不是稳定
java工程师面试官一...java高级软件工程师培训哪家好?? ……
解放报业颁发的“上海最具影响力 十大品牌培训...配合多次的模拟面试,为学员推荐就业, 解决了学生....如何解决Java语言的十大问题 ……
throws是获取异常,throw是抛出异常,try是将会发生异常的语句括起来,从而进行异常的处理,...Java9都快发布了,Java8的十大新特性你了解多少呢 ……
一、Lambda表达式 Lambda表达式可以说是Java 8最大的卖点,她将函数式编程引入了Jav...为什么Java现在这么火爆? ……
Java软件工程师一个梦想的职业,起初还是有很多不一样的评价,有褒有贬,但是有一点不可否认,Java...Java热门岗位有哪些? ……
Java软件工程师 Java网络编程工程师 Java桌面应用开发工程师 Java Web软件开发工程...
你可能感兴趣的内容?30378人阅读
JAVA编程(108)
关于java中&T&问题
Jdk5.0新特性Generic Types (泛型)
原文 来源: 中国IT实验室 作者: 未知 责编: 宝良
2.定义简单Java泛型
其实Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的method(String str1,String str2 ),方法中参数str1、str2的值是可变的。而泛型也是一样的,这样写class Java_Generics&K,V&,这里边的K和V就象方法中的参数str1和str2,也是可变。下面看看例子:
import java.util.H
class TestGen0&K,V&{
public Hashtable&K,V& h=new Hashtable&K,V&();
public void put(K k, V v) {
h.put(k,v);
public V get(K k) {
return h.get(k);
public static void main(String args[]){
TestGen0&String,String& t=new TestGen0&String,String&();
t.put(&key&, &value&);
String s=t.get(&key&);
System.out.println(s);
正确输出:value
这只是个例子,不过看看是不是创建一个用类型作为参数的类,参数是K,V,传入的“值”是String类型。这个类他没有特定的待处理型别,以前我们定义好了一个类,在输入参数有所固定,是什么型别的有要求,但是现在编写程序,完全可以不制定参数的类型,具体用的时候来确定,增加了程序的通用性,像是一个模板。
3. 泛型通配符
首先,下面是一个例子,作用是打印出一个集合中的所有元素,我们首先用老版本jdk1.4的编码规则,代码如下:
void printColleciton(Collection c){
iterator i = c.iterator();
for (k = 0; k & c.size();k++){
System.out.pritnln(i.next();
然后,我们用jdk5.0泛型来重写上面这段代码(循环的语法是新版本的语法):
void printCollection(Colleciton&Object& c){
for(Object e : c){
System.out.print(e);
这个新版本并不比老版本的好多少,老版本可以用任意一种集合类型作为参数来调用,而新版本仅仅持有Collection&Object&类型,Colleciton&Object&并不是任意类型的Collection的超类。
那么什么是所有Colleciton类型的超类型呢?它是Collection&?&这样一个类型,读作“未知Colleciton”。它的意思是说Colleciton的元素类型可以匹配任意类型,我们把它称作通配符类型,我们这样写:
void printCollection(Colleciton&?& c){
for (Object e: c){
System.out.println(e);
现在我们用任意类型的集合来调用它了,需要注意的是内部方法printColleciton(),我们任可以从c中来读出元素,并且这些元素是Object类型,而且是安全的,因为无论集合中是什么类型,它总包括Object,但是将任意对象加到集合中是不安全的:
Colleciton&?& c = new ArrayList&String&();
c.add(new Object());//编译时错误
由于我们不知道c持有的是什么类型的元素,我们不能加object到集合中去。add()方法用类型E作为参数,(集合的元素类型)当真正的参数类型是?的时候,它代表的是一些未知类型。任何传递给add()方法的参数必须是这个未知类型的子类型。由于我们不知道未知类型,所以我们传递给它任何东西。主要的例外是null,它是每一个类型的成员。
另一方面,假定给一个List&?&,我们调用get()并且充分利用结果。结果类型是未知类型。但是我总是知道它是一个Object,因此分配一个从get()取出来的结果到一个object的变量是安全的,或者作为一个参数传递到一个需要object类型的地方。
3.1有限制的通配符
考虑一个画图的应用程序,这个程序能够画长方形、圆等类型,为了在程序中表示这样的图形,你可以定义一个类型的层次结构:
public abstract class Shape{
public abstract void draw(Canvas c);
public class Circle extends Shape{
private int x,y,
public void draw(Canvas c){}
public class Rectangle extends Shape{
private int x,y,width,
public void draw(Canvas c){
//这些类能被画在画布上:
public class Canvas{
public void draw(Shape s){
s.draw(this);
任何画图的动作的都包含一些图形,假设他们被表示在一个list中,在Canvas中它将会有一个很方便的方法来画他们:
public void drawAll(List&Shape& shapes){
for(Shape s :shapes){
s.draw(this);
现在类型规则说,方法drawAll()只能在真正的Shape类型的List上被调用,而它的子类无法调用,例如List&Circle&上被调用。这是很不幸的。由于所有的方法确实从List中读出Shape,所以它仅能在List&Object&上被调用,下面我们改后的代码可以在任意类型的Shape上被调用:
public void drawAll(List& ? extends Shape&{ }
这里有一个很小的不同是,我们已经用List&? extends Shape&替换了List&Object&,现在drawAll()方法可以接受任意的Shape的子类了,我们当然可以在List&Circle&上调用。
&? extends Class&是一种限制通配符类型,它可以接受所有&Class&以及Class的子类型。然而调用代价是,只读访问,无法向shapes中添加元素。像通常一样,使用通配符带来的灵活性将付出代价,例如,下面是不允许的:
public void addRectangle(List&? extends Shape& shapes){
shapes.add(0,new Rectangle());//编译时错误
限制性通配符的一个例子是,是一个人口普查的例子,我们假设数据是由一个名字映射一个人,名字是字符串,人(可以是Person,或是它的子类Driver),Map&k,v&是一个泛型的例子,它拥有两个参数,表示为一个KEY和value的映射MAP
再次注意正规参数的命名规则,K代表key,V代表value
public class Census{
public static void addRegistry(Map&String ? extends Person& Registry){ }
Map&String,Driver&
allDrivers =;
census.addResigtry(allDrivers);
编写泛型类要注意:
1) 在定义一个泛型类的时候,在 “&&”之间定义形式类型参数,例如:“class TestGen&K,V&”,其中“K” , “V”不代表值,而是表示类型。
2) 实例化泛型对象的时候,一定要在类名后面指定类型参数的值(类型),一共要有两次书写。例如:
TestGen&String,String& t=new TestGen&String,String&();
3) 泛型中&K extends Object&,extends并不代表继承,它是类型范围限制。
4.泛型与数据类型转换
4.1. 消除类型转换
上面的例子大家看到什么了,数据类型转换的代码不见了。在以前我们经常要书写以下代码,如:
import Java.util.H
class Test {
public static void main(String[] args) {
Hashtable h = new Hashtable();
h.put(&key&, &value&);
String s = (String)h.get(&key&);
System.out.println(s);
这个我们做了类型转换,是不是感觉很烦的,并且强制类型转换会带来潜在的危险,系统可能会抛一个ClassCastException异常信息。在JDK5.0中我们完全可以这么做,如:
import Java.util.H
class Test {
public static void main(String[] args) {
Hashtable&String,Integer& h = new Hashtable&String,Integer& ();
h.put(&key&, new Integer(123));
int s = h.get(&key&).intValue();
System.out.println(s);
这里我们使用泛化版本的HashMap,这样就不用我们来编写类型转换的代码了,类型转换的过程交给编译器来处理,是不是很方便,而且很安全。上面是String映射到String,也可以将Integer映射为String,只要写成HashTable&Integer,String& h=new HashTable&Integer,String&();h.get(new Integer(0))返回value。果然很方便。
4.2 自动解包装与自动包装的功能
从上面有没有看到有点别扭啊,h.get(new Integer(123))这里的new Integer(123);好烦的,在JDK5.0之前我们只能忍着了,现在这种问题已经解决了,请看下面这个方法。我们传入一个int这一基本型别,然后再将i的值直接添加到List中,其实List是不能储存基本型别的,List中应该存储对象,这里编译器将int包装成Integer,然后添加到List中去。接着我们用List.get(0);来检索数据,并返回对象再将对象解包装成int。恩,JDK5.0给我们带来更多方便与安全。
public void autoBoxingUnboxing(int i) {
ArrayList&Integer& L= new ArrayList&Integer&();
int a = L.get(0);
System.out.println(&The value of i is & + a);
4.3 限制泛型中类型参数的范围
也许你已经发现在TestGen&K,V&这个泛型类,其中K,V可以是任意的型别。也许你有时候呢想限定一下K和V当然范围,怎么做呢?看看如下的代码:
class TestGen2&K extents String,V extends Number&
private V v=
private K k=
public void setV(V v){
public V getV(){
return this.v;
public void setK(K k){
public V getK(){
return this.k;
public static void main(String[] args)
TestGen2&String,Integer& t2=new TestGen2&String,Integer&();
t2.setK(new String(&String&));
t2.setV(new Integer(123));
System.out.println(t2.getK());
System.out.println(t2.getV());
上边K的范围是&=String ,V的范围是&=Number,注意是“&=”,对于K可以是String的,V当然也可以是Number,也可以是Integer,Float,Double,Byte等。看看下图也许能直观些请看上图A是上图类中的基类,A1,A2分别是A的子类,A2有2个子类分别是A2_1,A2_2。
然后我们定义一个受限的泛型类class MyGen&E extends A2&,这个泛型的范围就是上图中兰色部分。
这个是单一的限制,你也可以对型别多重限制,如下:
class C&T extends Comparable&? super T& & Serializable&
我们来分析以下这句,T extends Comparable这个是对上限的限制,Comparable& super T&这个是下限的限制,Serializable是第2个上限。一个指定的类型参数可以具有一个或多个上限。具有多重限制的类型参数可以用于访问它的每个限制的方法和域。
5.泛型方法
考虑写一个持有数组类型对象和一个集合对象的方法,把数组里的所有对象都放到集合里。第一个程序为:
static void fromArrayToColleciton(Object[]a,Collection&?& c){
for (Object o : a){
c.add(o);//编译时错误
到现在为止,你可能学会避免开始的错误而去使用Collection&Object&作为集合参数的类型,你可能会意识到使用Colleciton&?&将不会工作。
解决这个问题的方法是使用泛型方法,GENERIC METHODS,就像类型声明、方法声明一样,就是被一个或更多的类型参数参数化。
static &T& void fromArrayToCollection(T[]a,Collection&T& c){
for(T o :a){
c.add(o);//正确
我们可以用任意类型的集合调用这个方法,他的元素类型是数组元素类型的超类型。
Object[] oa = new Object[100];
Collection &Object& co = new ArrayList&Object&();
fromArrayToCollection(oa,co);//T 被认为是Object类型
String[] sa = new String[100];
Colleciton&String& cs = new ArrayList&String&();
fromArrayToCollection(sa,cs);//T被认为是String类型
fromArrayToCollection(sa,co);//T 被认为是Object类型
Integer[] is = new Integer[100];
Float[] fa = new Float[100];
Number[] na = new Number[100];
Collection&Number& cn = new ArrayList&Number&();
fromArrayToCollection(is,cn);//Number
fromArrayToCollection(fa,cn);//Number
fromArrayToCollection(na,cn);//Number
fromArrayToCollection(na,co);//Object
fromArrayToCollection(na,cs);//编译时错误
我们不必给一个泛型方法传递一个真正的类型参数,编译器会推断类型参数.一个问题出现了,什么时候使用泛型方法,什么时候使通配符类型,为了回答这些问题,我们从Colleciton库中看一下几个方法:
interface Collection&E&{
public boolean containsAll(Collection&?& c);
public boolean addAll(Collection&? extends E& c);
使用泛型方法的形式为:
interface Collection&E&{
public &T& boolean containsAll(Collection&T& c);
public &T extends E& boolean addAll(Collection&T& c);
无论如何,在ContainAll和addAll中,类型参数T仅被使用一次。返回类型不依赖于类型参数,也不依赖方法中的任何参数。这告诉我类型参数正被用于多态,它的影响仅仅是允许不同的实参在不同的调用点被使用。
泛型方法允许类型参数被用于表达在一个或更多参数之间或者方法中的参数、返回类型的依赖。如果没有如此依赖,泛型方法就不能被使用。可能一前一后来联合使用泛型和通配符,这里有个例子:
class Collections{
public static &T& void copy(List&T& dest,List&? extends T& src){
注意两个参数之间的依赖,任何从原list的对象复制,必须分配一个目标LIST元素的类型T,于是Src的元素类型可能是任何T的子类型。我们不必在意在COPY的表达中,表示依赖使用一个类型参数,但是是使用一个通配符。
下面我们不使用通配符来重写上面的方法:
class Collections{
public static &T,S extends T&
void copy(List&T& dest,List&S& src){
这非常好,但是第一个类型参数既在dst中使用,也在第二个类型参数中使用,S本身就被使用了一次。在类型src中,没有什么类型依赖它。这是一个标志我们可以用通配符来替换它。使用通配符比显示的声明类型参数更加清楚和精确。所以有可能推荐使用通配符。
通配符也有优势,可以在方法之外来使用,作为字段类型、局部变量和数组。
这里有一个例子。
返回到我们画图的例子,假设我们要保持一个画图请求的历史,我们可以在Shape类内部用一个静态变量来保持历史。用drawAll()存储它到来的参数到历史字段。
static List&List&? extends Shape&& history =
new ArrayList&List&? extends Shape&&();
public void drawAll(List&? extends Shape& shapes){
history.addLast(shapes);
for (Shape s : shapes){
s.draw(this);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1721029次
积分:14436
积分:14436
排名:第773名
原创:200篇
转载:198篇
评论:161条
(1)(1)(1)(1)(1)(2)(14)(8)(10)(21)(44)(14)(6)(17)(20)(62)(31)(11)(50)(12)(10)(7)(13)(12)(3)(10)(9)(7)

我要回帖

更多关于 java遇到的问题 的文章

 

随机推荐