一道Java编程题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道Java编程题相关的知识,希望对你有一定的参考价值。

写Applet小程序,界面如图所示,在文本框中输入三个整数后按回车,会在状态栏显示从小到大顺序排列结果,并同时清空文本框中内容,以备下一次的输入。

Java程序:

import java.awt.FlowLayout;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import javax.swing.JApplet;

import javax.swing.JLabel;

import javax.swing.JTextField;

public class Test27 extends JApplet implements KeyListener

JTextField txt1, txt2, txt3;

public void init()

this.setLayout(new FlowLayout());

txt1 = new JTextField(10);

txt2 = new JTextField(10);

txt3 = new JTextField(10);

txt3.addKeyListener(this);

this.add(new JLabel("输入第1个整数"));

this.add(txt1);

this.add(new JLabel("输入第2个整数"));

this.add(txt2);

this.add(new JLabel("输入第3个整数"));

this.add(txt3);

this.setSize(250, 200);

this.setVisible(true);

@Override

public void keyPressed(KeyEvent e) 

if(e.getKeyCode() == 10)//按下回车键

int num1, num2, num3;

int temp;

//获取来自文本框的值

num1 = Integer.parseInt(txt1.getText());

num2 = Integer.parseInt(txt2.getText());

num3 = Integer.parseInt(txt3.getText());

//对三个数按非递减排序

if(num1 > num2)

temp = num1;

num1 = num2;

num2 = temp;

if(num2 > num3)

temp = num2;

num2 = num3;

num3 = temp;

if(num1 > num2)

temp = num1;

num1 = num2;

num2 = temp;

//在状态栏显示数据

this.showStatus(num1 + ", " + num2 + ", " + num3);

//清空文本框

txt1.setText(null);

txt2.setText(null);

txt3.setText(null);

@Override

public void keyReleased(KeyEvent e) 

@Override

public void keyTyped(KeyEvent e) 

运行测试:

追问

哈哈,你比较了两次num1和num2吧?没关系,我能看懂!

参考技术A import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Arrays;

import javax.swing.JLabel;
import javax.swing.JTextField;

public class MyApplet extends Applet
private static final long serialVersionUID = 1L;

private JLabel jl;
private JTextField jtf;
private JTextField[] text = new JTextField[3];//设置输入框数组

public MyApplet()
jl = new JLabel("第一个整数:");
this.add(jl, BorderLayout.WEST);
jtf = new JTextField(10);
this.add(jtf);
text[0] = jtf;//输入框1放进输入框数组中
jl = new JLabel("第二个整数:");
this.add(jl, BorderLayout.WEST);
jtf = new JTextField(10);
this.add(jtf);
text[1] = jtf;//输入框2放进输入框数组中
jl = new JLabel("第三个整数:");
this.add(jl, BorderLayout.WEST);
jtf = new JTextField(10);
this.add(jtf);

//加入监听
jtf.addKeyListener(new KeyAdapter()
public void keyPressed(KeyEvent e)
if (e.getKeyCode() == KeyEvent.VK_ENTER)
int[] num = new int[3];
// 取出数据
for (int i = 0; i < num.length; i++)
//将输入框数组转换成数组存入数组,方便排序
num[i] = Integer.parseInt(text[i].getText());
text[i].setText(null);

Arrays.sort(num);// 用arrays类中sort方法排序,从小到大
String str = num[0] + "--" + num[1] + "--" + num[2];
MyApplet.this.showStatus("排序大小为:" + str);


);
text[2] = jtf; //输入框3放进输入框数组中
this.setVisible(true);

追问

我是初学者,你写的太难了……

追答

很难么?JDK中的工具抱中有一个类是可以帮你排序的,干嘛要去自己写!!

追问

初学者表示不懂,而且这是作业!

追答

额 怎么能有这种态度,不懂才要去学,懂了还去学干嘛?这里既然你在这里问到了,那么肯定教给你更简洁,方便的代码,以后遇到了,你肯定就知道有简单的方法...可以处理这样的问题!!!

追问

你说的那个我们根本就没学,我怎么能用?你让我按你那高深的方法去写,难道你想让我被老师发现是抄别人的吗?

参考技术B import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test extends Applet implements ActionListener

/**
* @param args
*/
Button button1,button2;
Panel panel,panel2;
Label label;
TextField text1,text2,text3;
int num1,num2,num3;

public void init()
button1=new Button("确定");
button2=new Button("取消");
text1=new TextField(8);
text2=new TextField(8);
text3=new TextField(8);
panel=new Panel();
panel2=new Panel();
label=new Label();
panel.setLayout(new GridLayout(3,2,5,5));
panel2.setLayout(new GridLayout(2,2,5,5));
panel.add(new Label("请输入第1个整数"));
panel.add(text1);
panel.add(new Label("请输入第2个整数"));
panel.add(text2);
panel.add(new Label("请输入第3个整数"));
panel.add(text3);

panel2.add(button1);
panel2.add(button2);
panel2.add(label);
this.setLayout(new GridLayout(2,1));
add(panel);
add(panel2);

this.setSize(250, 200);


public void start()
button1.addActionListener(this);


public void destroy()



public void stop()



public void paint(Graphics g)
g.setColor(Color.RED);
g.drawString("龙影设计", 40, 150);

public void actionPerformed(ActionEvent e)
// TODO Auto-generated method stub
Object obj = e.getSource();
if(obj==button1)
num1=Integer.parseInt(text1.getText());
num2=Integer.parseInt(text2.getText());
num3=Integer.parseInt(text3.getText());
int temp;
if(num1>num2)
temp=num1;
num1=num2;
num2=temp;

else
if(num2>num3)
temp=num2;
num2=num3;
num3=temp;


String str=num1+"<"+num2+"<"+num3;
text1.setText("");
text2.setText("");
text3.setText("");
label.setText("结果为:"+str);
//System.out.println(str);



追问

最后一句System.out.println(str);有误,应该是在状态栏里显示的!

参考技术C - -d..还是用排序法吧给你个冒泡排序法的代码
public int[] mySort(int [] nums)
for(int i=0;i<nums.length;i++)
for(int j=i;j<nums.length;j++)
if(nums[i]>nums[j])
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;



return nums;

封装成一个数组放进去,无论多长都可以排序成从大到小

历史上最简单的一道Java面试题,但无人能通过

这可能是历史上最简单的一道java面试题了。
题目很简单,完成代码,判断一个整数是否是奇数:
  
    
    
  
public boolean isOdd(int i)
相信相当数量的人都已经在准备吐槽了,只要看过《编程珠玑》的人都知道这道题的答案和其中极为简单的道理。不过别着急骂街,不管你信不信,这道笔试题我拿到的答案好多都长这样:
  
    
    
  
public boolean isOdd(int i{
    if (i % 2 == 1) {
        System.out.println("是奇数");
    } else {
        System.out.println("是偶数");
    }
}
然后编译一下,发现错误了,挠挠头,顶多改成这样:
  
    
    
  
public boolean isOdd(int i) {
    if (i % 2 == 1) {
        return true;
    } else {
        return false;
    }
}
好吧,我承认我在筛选简历的能力可能有一些问题,不过不管你信不信,好多大厂工作了几年的程序员,都会写出如上风格的代码。
于是我继续进行引导:
我:“这个函数的定义要求返回一个什么类型的值?”
候选人看了看题干:“布尔类型。”
我:“那么,你if后面的括号里面的表达式的值是一个什么类型的?”
引导到这一步的时候,依然有高达两成的候选人选择了放弃,表示他们不知道。好吧,我真的不知道你们来面试这个职位的信心何在。不过大部分人想了想,还会回答出正确答案:
候选人:“也是布尔类型。”
我:“然后呢?”
有少量候选人虽然没说出来,但是我能看出来他们觉得这只是一个巧合,并不知道怎么进行下一步。不过,大多数人想了想之后,还是会优化成如下代码:
  
    
    
  
public boolean isOdd(int i) {
    return i % 2 == 1;
}
终于过了第一关了,进行第二关的引导:
我:“那我传进来一个-1呢?”
将近一半的人在想了想之后会嘴硬地表示他们从小被教导只有自然数才有奇数偶数之分,负数没有奇偶这一说。剩余的人接受了这个设定,想了一会儿,改成这样:
  
    
    
  
public boolean isOdd(int i) {
    return i % 2 == 1 || i % 2 == -1;
}
并且在提示之后优化成这样:
  
    
    
  
public boolean isOdd(int i) {
    return i % 2 != 0;
}
好吧,这是迄今为止第一个能通过编译且完全满足了需求的代码实现了。说实话,一开始就写成这样的人,如果没有其他什么明显的缺点的话,我这里基本就能通过了。我承认我的要求比较低,但是来面试的人能直接写出这样的真的不太多,粗略地估计的话,大概占一到两成吧。
但是这里还没完呢,还有最重要的第三关呢:
我:“有更好的办法吗?”
候选人:“?”
我:“我觉得取模操作比较慢,有更快的解决方案吗?”
除了少数人能自己想想就想出来了之外,绝大部分(毫不夸张)候选人表示没有或者不知道,于是进行下一步提示:
我:“奇数和偶数转换成二进制有什么区别?”
相当一部分候选人表示自己不懂什么叫二进制和位运算,有的还表示java不是c语言,不用研究这些,就跟很多评论会吐槽我在装逼一样。少部分候选人想了想,会怯怯地回答。
候选人:“奇数最后一位是1,偶数最后一位是0。”
我:“然后呢?”
这里很奇怪的点是,大部分能聊到这里来的候选人会想起来移位操作,我真的不知道是为什么,虽然这道题确实可以有这种操作:
  
    
    
  
public boolean isOdd(int i) {
    return i >> 1 << 1 != i;
}
但是这根本不是重点好吧!!!
总之,无论如何,能在第三关的各种引导之后,能写出下面这个结果来的人,真的不多。能一开始没有任何引导的就写出来的人,至今只见过两个,一个我去哪儿都带着,一个拒了我的offer。
  
    
    
  
public boolean isOdd(int i) {
    return (i & 1) == 1;
}
别以为这就完了!终极boss来了:
我:“这样是不是比上面取模运算要快?”
候选人:“那当然了,位运算肯定快啊。”
我:“但是我们实际代码测试过,发现上面的按位与操作和取模操作,实际运行的时间是差不多的,为什么呢?”
候选人心里mmp:“闹了半天你这是在逗我玩啊???”
然而真正能回答出原因来的人,面试过程中我没见过,可能是大牛都看不上我所在的公司吧。只有在某公司的时候,一个同事想了想,给出了我正确答案。难道是我经历的公司都太low了么……

达内6月免费训练营正式报名啦,马上阅读原文,就能第一时间体验和学习IT技能!进入高薪名企的IT行业,名额有限,先到先得!


--精彩推荐--

课程咨询达妹微信:flow_13,欢迎添加,了解课程介绍,获取学习资源。

历史上最简单的一道Java面试题,但无人能通过
*版权声明:转载文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。 


最近微信修改了推送规则,为了让大家第一时间收到我们的文章,请朋友们看完文章后点一下右下角的“在看”或“星标”。好不容易认识你,我可不想失去你♥♥♥


点击下方“阅读原文”抢6月免费训练营名额吧!

以上是关于一道Java编程题的主要内容,如果未能解决你的问题,请参考以下文章

java并发编程--一道经典多线程题的2种解法

急求一道编程题

Python和Java编程题

用C++编程思想解决一道题

急求几道java编程题,希望大神们帮帮忙!

由字符串反转(使用递归)引申出来一道Java面试题