一: 首先弄清题目的意思
创新互联建站长期为上1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为平鲁企业提供专业的做网站、成都做网站,平鲁网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。
A.需要的主要组件列表:
1. 创建一个窗口,窗口标题叫Information
2. 3个标签, 用于显示文字 Name Number Class
3. 3个文本框, 用于填写信息
4. 1个按钮, 文字是确认
5. 1个文本域
B.业务逻辑
1. 当点击按钮确认的时候, 把 文本框的信息显示到文本域
C.设计的主要技术
JLabel , JButton, JTextField ...等, 都是swing的组件 , 所以应该使用swing进行创建
二: 确定使用的布局
swing虽然重写了大部分的组件, 但是布局, 依旧沿袭awt技术
分析图片上的布局:
至少有2种方法可以实现,
方法一: 绝对布局 , 优点: 配合可视化GUI拖曳, 可以完美的实现图上的组件的位置
但是缺点也是致命的, 不同的操作系统平台下, 可能会出现位置的移动,
只适合开发平台, 移植效果差 . 所以不推荐使用
方法二: 灵活的表格布局, 配合流式布局 , 所有操作系统下,显示效果都比较统一.
三: 效果图
四: 参考代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FrameDemo extends JFrame {
//申明需要的组件
private final JTextField jtf1,jtf2,jtf3;
private final JTextArea jta;
public FrameDemo() {
setTitle("Information");//设置窗口标题
setSize(320, 360);//设置窗口大小
setLocationRelativeTo(null);//设置窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE);//设置关闭时退出虚拟机
getContentPane().setLayout(new FlowLayout());//设置窗口布局为流式布局
JPanel jp = new JPanel(new GridLayout(4, 2));//设置jp面板为表格布局4行2列
//第一行
JPanel jp01 = new JPanel();
JLabel jl1 = new JLabel("Name:");
jp01.add(jl1);
JPanel jp1 = new JPanel();
jtf1 = new JTextField(8);
jp1.add(jtf1);
//第二行
JPanel jp02 = new JPanel();
JLabel jl2 = new JLabel("Number:");
jp02.add(jl2);
JPanel jp2 = new JPanel();
jtf2 = new JTextField(8);
jp2.add(jtf2);
//第三行
JPanel jp03 = new JPanel();
JLabel jl3 = new JLabel("Class:");
jp03.add(jl3);
JPanel jp3 = new JPanel();
jtf3 = new JTextField(8);
jp3.add(jtf3);
//第四行
JPanel jp04 = new JPanel();
JLabel jl4 = new JLabel("");
jp04.add(jl4);
JPanel jp4 = new JPanel();
JButton jb = new JButton("确认");
jp4.add(jb);
jp.add(jp01);
jp.add(jp1);
jp.add(jp02);
jp.add(jp2);
jp.add(jp03);
jp.add(jp3);
jp.add(jp04);
jp.add(jp4);
getContentPane().add(jp);
jta = new JTextArea();
jta.setColumns(20);//设置文本域的大小
jta.setEditable(false);//设置文本域不可编辑
jta.setBackground(jp.getBackground());//设置文本域的背景色和面板一样
getContentPane().add(jta);
jb.addActionListener(new ActionListener() {//给按钮添加事件
public void actionPerformed(ActionEvent e) {//点击按钮,显示信息到文本域
String name = jtf1.getText();
String number = jtf2.getText();
String clazz = jtf3.getText();
jta.setText("You name is "+name+" number is "+number+" class is "+clazz);
}
});
}
public static void main(String[] args) {
new FrameDemo().setVisible(true);//创建窗口,被设置为可见
}
}
五: 拓展
虽然图形界面的实现方法是多样的, 我们一定要根据具体情况, 选择一个比较优化的 合理的, 符合业务逻辑的实现方法
package jisuanqi_new;
import java.awt.*;
import java.awt.event.*;
public class JiSuanQi_new implements ActionListener
{
Panel p1;//声明面板p1
TextField t1;//声明文本行t1
String[] label = {"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};//声明标签数组label1存放按钮上的标签
Button[] b;//声明按钮数组存放16个按钮
private int i;//声明i以备后用
private String op1 = "0";//运算数备用
private String operator = "+";//运算符备用
private boolean append = false;//备用
public JiSuanQi_new()//构造方法
{
t1=new TextField();//初始化文本行t1
b = new Button[label.length];//初始化按钮数组b
p1=new Panel();//初始化面板p1
p1.setLayout(new GridLayout(4,4,4,4));//使面板选择网格布局管理器以备储存16个按钮(4行4列)
for(int i=0;ib.length;i++)//利用for循环把标签放在按钮上,使每个按钮添加事件监听器,在面板p1上添加上16个按钮
{
b[i] = new Button(label[i]);//把标签依次放在16个按钮上
b[i].addActionListener(this);//使每个按钮添加动作事件监听器
p1.add(b[i]); //分别将按钮添加到面板p1上
}
Frame f=new Frame("计算器1.0");//初始化窗口f,起名字计算器1.0
f.setLayout(new BorderLayout());//为窗口选择边界布局管理器
f.add(BorderLayout.NORTH,t1);//把文本行他添加到窗口的北部
f.add(BorderLayout.CENTER,p1);//把面吧p1添加到窗口的中间
f.addWindowListener(new WindowAdapter(){//给窗口f添加窗口事件监听器
public void windowClosing(WindowEvent eve){//运行窗口关闭方法
System.exit(0);//退出程序
}
});
f.setSize(250, 250);//设置窗口大小
f.setLocation(200,200);
f.setVisible(true);//显示窗口
}
public static void main(String args[])
{
new JiSuanQi_new(); //调用构造方法
}
public void actionPerformed(ActionEvent ae)
{//按钮被操作发生
String comm = ae.getActionCommand();//返回与此动作相关的命令字符串,即:使用者第一次点击的按钮是什么。
if("0123456789".indexOf(comm)!=-1)//如果相关命令字符串为0~9之间的数字则执行
{
if(append){
String temp = t1.getText();//新数字
t1.setText(temp+comm);
}else{ //因为此时append为false执行这个
t1.setText(comm); //将文本行t1设置为相关命令字符串(你按中的按钮代码)
append = true;//此时append=true若继续按按钮若继续按数字的话1.第一次的按话不会改变2.非第一次按得话会覆盖之前按得数字(即缺点:只能进行单个数字的计算)
}
}
else if(("+-*/".indexOf(comm)!=-1))//如果相关命令字符串为+-*/之间的数字则执行
{
//保存
//t1.setText(comm);
op1 = t1.getText();//把第一个数赋值给op1
operator = comm;//把命令字符串赋值给operator
append = false;//此时append为false即若继续按按钮若按数字的话将重复上面的动作,按符号的话将覆盖之前的符号
}
else if("=".equals(comm))//如果按的是=号,则按条件进行下面的运算
{
String op2 = t1.getText();//op2第二个数
double d1 = Double.parseDouble(op1);
double d2 = Double.parseDouble(op2);
if(operator.equals("+")){
d1 = d1 + d2 ;
}else if(operator.equals("-")){
d1 = d1 - d2;
}else if(operator.equals("*")){
d1 = d1 * d2;
}else {
d1 = d1 / d2;
}
t1.setText(d1+"");//显示计算结果
append = false;
}
else if(".".equals(comm))//若是.号继续按
{
String temp = t1.getText();
if(temp.indexOf(".")==-1){
t1.setText(temp+".");
append = true;
}
}
}
}
来源:Code Wizards HQ
智能观 编译
孩子想学编码的话,有很多方法可以展开学习。可以让他们学着构建视频游戏、创建动画、开发移动应用程序和搭建网站。不管孩子喜欢哪种形式,都有大量的编码书供他们快速学起来!
但是,怎么才能找到一本好的儿童编码书呢?
没经验的孩子的编码书,应该涵盖基本内容。
翻翻适合初学者的书,看看里面是否有加减乘除基本数学运算,仔细看看带变量、if / then语句、循环和函数的章节。你不需要理解这些概念是怎么工作的,只要看看书的标题里有没有提这些,如果没有,这本书不适合新手。
许多好的儿童编码书只用一种语言。
好的儿童编码书只侧重一种语言,可以是Scratch、Javascript或Python。如果你不知道孩子应该学哪种语言,可以买两三种不同语言的书。
好的儿童编码书有很多照片和插图。
对于那些第一次接触代码的孩子来说,视觉吸引力很重要。好的儿童编码书每一页上都有丰富多彩的插图,充分吸引孩子的关注。
好的儿童编码书提供有用的、可转移的知识。
学一门特定的语言并不像理解基本的编码概念那么重要。写代码的人可以从任何语言开始学起,然后轻松地转入其他语言。有些语言不太适合孩子,如C和C++,很多成年人都学不好。
因此,根据以上几项挑选原则,我们推出一份教孩子编码的书籍,涵盖块编程、编程基础语言、Web开发、移动开发、游戏编程、机器人和物联网等几大类,并标出适合孩子学习的年龄段,可以说是史上最全的儿童编码书籍汇总了!如果你正在苦恼怎么给孩子选书,快收下这份开学礼物吧~
块编程类
学龄前的儿童也可以学习用块编程语言编码。块语言是高度图形化的,易于学习。Scratch是为孩子们设计的一种流行的块语言。
1. Coding with Scratch Workbook
(用Scratch编码)
作者:DK出版公司
适合年龄: 6-9岁
在短短40页的篇幅里,读者就能学会用Scratch做任何事,从解决简单的数学问题到构建、分享游戏。每章都包含指导孩子们完成简单编码项目的分步说明。
2. Learn to Program with Scratch:A Visual Introduction to Programming with Games, Art, Science, and Math
(学会用Scratch编程:游戏、艺术、科学和数学编程的可视化介绍)
作者:Majed Marji
适合年龄: 10岁及以上
这本将近300页的书涵盖了初学者需要了解的关于Scratch语言的所有内容。读完这本书后,孩子们将会牢固掌握Scratch和适用于任何语言的编程思想。
3. Scratch for Kids For Dummies
(儿童Scratch傻瓜书)
作者:Derek Breen
适合年龄: 10-14岁
读者将在构建16个项目中,学习变量、if / then语句、循环和基本编程逻辑。
4. The Official ScratchJr Book: Help Your Kids Learn to Code
(中文版:动手玩转ScratchJr编程)
作者:Marina Umaschi Bers 、Mitchel Resnick
适合年龄: 5-9岁
对于那些还太小不能学习Scratch的孩子来说,Scratchr Jr是一种更简单的块编程语言。
5. MicroWorlds EX Books for Kids
(儿童MicroWorlds EX工具书)
作者:Steve Robson
适合年龄: 5-9岁
借助MicroWorlds EX工具,孩子们通过图形和文本来学习。他们没有被一种纯图形语言和“固定”代码所束缚,也不必100 %处理文本。
链接:
6. Coding for Kids For Dummies
(儿童编码傻瓜书)
作者:Camille McCue
适合年龄: 10-14岁
书中指导孩子完成15个项目,包括绘画、动画和游戏,还带领孩子们完成了创建计算机程序的过程,从构思到构建、测试。
编程基础
尽管C++、Java和Python等语言之间存在着巨大的差异,但理解编码基础知识,孩子可以相对轻松地从一种语言迁移到另一种语言。
Python
7. Python for Kids
(适合孩子的Python学习)
作者:Jason R. Briggs
适合年龄: 10岁以上
这本书对孩子来说既全面又容易理解。内容适合小学生,但也适合许多成人学习者看。
链接:
8. Coding Projects in Python
(Python编码项目)
作者:DK出版公司
适合年龄: 9-12岁
不管孩子已经学了Scratch之类的块语言,还是没有做过任何编程,都可以在这本书里找到需要的一切来构建软件。书后面的词汇和参考部分对孩子来说很有帮助。
链接:
9. Python in Easy Steps
(学习Python的简单步骤)
作者:Mike McGrath
适合年龄:中学及以上
本书不是专门为孩子写的,但它内容组织得很好,中学生,尤其是有一些Scratch或其他语言经验的中学生,可以很容易地理解它。读完本书,学生可以用Python构建简单的网页和编写桌面应用程序。
10. Hello World! Computer Programming for Kids and Other Beginners
(中文版:父与子的编程之旅:与小卡特一起学Python)
作者:Warren Sande
适合年龄: 12岁以上
学习编码时,大家编写的第一个程序就是在屏幕上显示“Hello World”。本书沿袭了这一传统,并为新手提供构建任何类型有用软件所需的必要技能。
链接:
Java
Java是一种非常流行的语言,用于所有操作系统和Android设备。这也是高中计算机科学课程中最常见的语言。
11. Java Programming for Kids: Learn Java Step by Step and Build Your Own Interactive Calculator for Fun!
(面向儿童的Java编程:逐步学习Java,并构建自己的交互式计算器)
作者:R. Chandler Thompson
适合年龄: 13-17岁
这本书既有趣又简单。青少年读者可以通过Java编程语言,构建交互式计算器应用程序。
12. Java for Kids (and grown ups): Learn to Code and Create Your Own Projects with Java 8
(面向儿童和成年人的Java:学习用Java 8编写代码并创建自己的项目)
作者:Nadia Ameziane Garcia
适合年龄: 10-12岁
这本书只介绍学习过程中每一步所需要的东西。每一章都建立在前文介绍的基础上,孩子们可以在短时间内学会Java的基础知识。
C++
这不是最容易学的语言,但精通C++的人会更了解计算机是如何工作的。
13. C++ Progamming In Easy Steps
(C++编程的简单步骤)
作者:Mike McGrath
适合年龄:中学及以上
作者通过一系列简单的课程介绍了C++,并提供大量专家提示,以帮助读者获得最佳编程实践。这本书让孩子们短时间内学会C++基础知识,并可能沿用很多年。
14. C++ for Kids
(适合儿童的C++语言)
作者:Blaise Vanden-Heuvel、John C Vanden-Heuvel Sr.
适合年龄: 7-9岁
这本简短多彩的书向孩子们展示了C++编程是如何工作的。示例程序各色各样,这样孩子们就能理解程序的各个部分实际上是做什么的。
Web开发类
HTML和CSS
网页用HTML构建,用CSS设计风格。这些不是真正的编程语言,但它们让孩子接触文本编辑器、构思想法,对日后探索Javascript或Python之类的语言很有用。
15. Build Your Own Website, a Comic Guide to HTML, CSS and WordPress
(建立你自己的网站,HTML、CSS和WordPress的漫画指南)
作者:Nate Cooper、Kim Gee
适合年龄:中学及以上
在这本漫画风格的网站搭建指南中,孩子们学习HTML标记语言,熟悉控制网页样式的CSS语言,了解内容管理系统WordPress。
链接:
16. CoderDojo Nano: Building a Website: Create with Code
(用代码搭建网站)
作者:Clyde Hatter、CoderDojo
适合年龄: 8-12岁
这本书只有96页,引导孩子们完成建立网站的整个过程。孩子可以建立一个和书中例子完全一样的网站,也可以试着建自己喜欢的网站。
17. Creating a Website: Design and Build Your First Site
(创建网站:设计和建立你的第一个网站)
作者:Greg Rickaby
适合年龄: 7-11岁
这本书为孩子设计网页提供指南,从规划网站的结构到添加使网站与众不同的细节。同时提供了软件工程师在现实世界中使用的许多技巧和操作过程。
JavaScript
许多程序员认为JavaScript是互联网的未来,学习这种语言可以建立互动性强的、有用的网站。
18. Computer Coding with Javascript
(使用Javascript进行计算机编码)
作者:DK出版公司
适合年龄: 8-12岁
从HTML、CSS转到JavaScript可能容易晕,因为JavaScript更加复杂、强大。但这本书内容比较简单,孩子们可以顺利过渡。
19. Javascript for Kids: A Playful Introduction to Programming
(面向儿童的JavaScript:有趣的编程入门)
作者:Nick Morgan
适合年龄: 10岁以上
本书从数组、变量类型讨论到游戏编程。无论孩子想制作游戏、制作动画还是使用虚拟现实,JavaScript都能让他们把想法变成真实的程序。
链接:
20. Javascript for Kids For Dummies
(面向儿童的JavaScript傻瓜书)
作者:Chris Minnick、Eva Holland
适合年龄: 10-13岁
如果你有兴趣读编程书,帮孩子学习编码,试试这本。这本书远远超出基本内容,方便读者构建任何能想到的Web项目。
链接:
21. Get Coding! Learn HTML, CSS, Javascript Build a Website, App Game
(编码!学习HTML,CSS,Javascript ;建立一个网站,应用程序和游戏)
作者:Young Rewired State
适合年龄: 9-12岁
这本书中的课程是以任务形式呈现的,教导孩子构建网站、应用程序和游戏。他们还会了解不同类型的编程语言以及每种语言的优点。
移动开发
安卓应用
App Inventor是一个完全在线开发的Android编程环境,具有类似Scratch的块编程界面。它简化了移动开发过程,是向孩子们介绍Android编程的理想方式。
22. Building a Mobile App
(构建移动应用程序)
作者:Guthals
适合年龄: 7-11岁
读这本书的孩子不仅学习编码,还学习规划、开发自己的定制应用。本书提供了专业人员使用的应用程序开发的内容,包括原型制作和创建应用程序框架,对热爱移动开发的孩子来说特别有价值。
23. Hello App Inventor
(你好,App Inventor)
作者:Paula Beer、Carl Simmons
适合年龄: 9岁以上
使用App Inventor构建的应用可以利用许多智能手机功能,如运动传感器、GPS和相机。本书通过30个示例项目向读者展示了如何利用这些功能。
链接:
iOS应用
为了构建苹果产品应用程序,开发人员使用了一种叫Swift的语言。创建这种语言时,软件工程师想让没经验的人容易学习。对于从未编程的孩子来说,这是一个很好的选择。
24. Coding iPhone Apps for Kids
(适合孩子的iPhone应用程序编码)
作者:Gloria Winquist、Matt McCarthy
适合年龄: 10岁以上
本书介绍了Swift语言和编码基础,并让孩子们构建两个真正的应用程序:一个生日跟踪器和一个滑板游戏。
25. Hello Swift
(你好,Swift)
作者: Tanmay Bakshi、Lynn Beighley
适合年龄: 9岁以上
Tanmay Bakshi可以说是我们的老朋友了,智能观从去年开始就报道他的故事。他4岁编码,9岁就发布第一个应用程序。通过他的书,读者也会构建能在iOS应用商店上发布的应用程序。
如果还有人对他不了解,可以看看我们往期的报道。附传送门:
13岁天才少年在IBM掀起一场人工智能风暴
IBM少年工程师说:人工智能的下一个前沿是心理健康
游戏编程
Scratch游戏编程
26. Coding Games in Scratch
(用Scratch编码游戏)
作者:Jon Woodcock
适合年龄: 8-12岁
这本书让孩子在浏览器中制作自己的游戏。
27. Code Your Own Games: 20 Games to Create with Scratch
(编码自己的游戏: 用Scratch创建20个游戏)
作者: Max Wainewright
适合年龄: 6-11岁
这本书分5个层次递进,20个游戏项目让孩子们熟悉编码和游戏开发的原理。每款游戏都锻炼了孩子们的能力,比如控制玩家互动、在屏幕上设置对象动画、添加声音。
28. Star Wars Coding Projects
(星球大战编码项目)
作者:Jon Woodcock、Kiki Prottsman
适合年龄: 8-12岁
喜欢《星球大战》的孩子可以通过C3PO、R2D2和其他角色学习编码。读者不需要任何编程经验就可以看这本书。
Python游戏编程
29. Mission Python
(Python任务)
作者:Sean McManus
适合年龄: 10岁以上
虽然对于10岁的孩子来说,这本书有点简单了,但它探索了Python游戏编程的深度。书从Python Essentials插件开始,逐渐深入更高级的概念,如音频文件处理和3D图形。
30. Invent Your Own Computer Games with Python
(中文版:Python编程快速上手——让繁琐工作自动化)
作者:Al Sweigart
适合年龄: 10岁以上
这本书通过对Hangman和Tic-Tac-Toe等几款流行游戏进行详细解释来教授编程。
链接:
我的世界
31. Learn to Program with Minecraft
(用我的世界学项目)
作者:Craig Richardson
适合年龄: 10岁以上
《我的世界》是一款受欢迎的3D游戏,孩子们可以在虚拟世界中探索、建造城堡等。本书介绍了如何使用Python编程扩展《我的世界》。
链接:
32. Minecraft Modding for Kids For Dummies
(用我的世界教孩子建模的傻瓜书)
作者:Guthals、Stephen Foster、 Lindsey Handley
适合年龄: 10-13岁
通过9个JavaScript项目,孩子们从《我的世界》里的“玩家”化身为 “建模师”。读者要有玩《我的世界》的经验,但不需要以前学过编码。
机器人和物联网
Arduino
Arduino是一台微型计算机,可以用传感器、LED灯和马达等小硬件控制各种电路。学习Arduino不仅仅意味着学习编码;它包括设计和建造真实世界的项目。
33. Adventures in Arduino
(Arduino历险记)
作者:Becky Stewart
适合年龄: 11-15岁
喜欢机械和工程的孩子会喜欢本书中的项目。孩子们了解Arduino,然后上手一些简单的项目,比如让LED灯亮起来。
链接:
34. Sylvia’s Super-Awesome Project Book: Super-Simple Arduino
(Sylvia的超棒项目书:超级简单的Arduino)
作者:Sylvia "Super-Awesome" Todd
适合年龄: 8-12岁
Sylvia介绍了如何建立Arduino项目来控制灯光和制作音乐等。这些项目不是复制代码,罗列事物,而是对事物如何工作以及为什么工作进行了详细解释。
树莓派
你可以把树莓派(Raspberry Pi)当成Arduino的升级版。两台计算机的尺寸差不多,但是树莓派的操作系统更接近笔记本电脑。
35. Raspberry Pi Projects Workbook
(树莓派项目工作簿)
作者:DK出版公司
适合年龄: 7-12岁
孩子们可要通过这本书制作游戏,制作音乐,制作动画,学习Scratch、Python和Raspberry Pi。
链接:
36. Adventures in Raspberry Pi
(树莓派历险记)
作者:Carrie Anne Philbin
适合年龄: 11-15岁
本书介绍的9个项目让孩子们快速上手树莓派,涵盖的概念编程有基础、游戏编程、图形创建等。
链接:
乐高机器人
乐高生产了几个套件,包括机器人滚动、旋转甚至攀爬的所有必要部件。他们也有自己的语言,孩子们用这些语言来创作。
37. The Art of Lego Mindstorms EV3 Programming
(乐高头脑风暴EV3编程的艺术)
作者:Terry Griffin
适合年龄: 10岁以上
本书教孩子们在EV3头脑风暴编程环境中,控制自己的机器人。他们学习如何建造乐高机器人并用代码控制它。
38. Building Robots with Lego Mindstorms
(用乐高头脑风暴套件制造机器人)
作者: Mario Ferrari、Giulio Ferrari、Ralph Hempel
适合年龄: 10岁以上
在本书中,孩子们使用电子电路和传感器,以及乐高头脑风暴套件,学习制造机器人。书中有大量关于齿轮、马达、气动和其他工程概念的信息,对于严肃的机器人爱好者来说很重要。
适合学龄前儿童的编码书
为低龄儿童设计的编码书,帮助儿童建立对计算机程序的模式、颜色和其他基本要素的认知。
39. Baby Loves Coding
(宝贝喜欢编码)
作者:Ruth Spiro
适合年龄:学前及以上
因为是给很小的孩子看的,书中没有提供任何明确的编码指导。它介绍了解决问题的方法,以及优秀程序员需要有的想法。
40. Learn to code: Robot Train’s Surprise Birthday Party (Volume 1)
(学会编码:机器人火车的惊喜生日聚会I)
作者:by Jen Chiou
适合年龄:学前及以上
孩子在本书中了解编码的先决条件,如决策和逻辑。通过触摸书上像按钮的图片,孩子们帮助一辆虚构的机器人火车向生日派对运送用品,从而了解编码逻辑是如何工作的。
41. HTML for Babies
(适合婴儿的超文本标记语言)
作者:Sterling Children's
适合年龄: 3-5岁
HTML是一种简单的标记语言,不需要复杂的逻辑,3-5岁的孩子可以通过本书,学会识别与网络编程相关的符号和颜色。
42. JavaScript for Babies
(适合婴儿的JavaScript语言)
作者:Sterling Children's
适合年龄: 3-5岁
这本书让孩子们了解JavaScript的一些基本结构和数据类型。
有趣的青少年编码书
让青少年读一本编程类的书可能很困难,所以以下书籍通过游戏开发和其他有趣的项目,帮助青少年学习。
43. Computer Programming for Teens
(适合青少年的电脑编程)
作者:Mary E. Farrell
适合年龄:青少年
没有编码经验的孩子和那些不知道学什么语言的孩子,是本书的目标受众。书中有一些C++、Python和Web编程语言的例子,孩子们将会找到最适合自己的编码项目。
44. Game Programming for Teens
(适合青少年的游戏编程)
作者:Maneesh Sethi
适合年龄:青少年
本书介绍了一种名为BlitzMax的游戏专用语言,它使孩子们能在所有平台( Windows、Mac、Linux )构建游戏。
链接:
适合女孩的编码书,STEM入门
女孩可以通过编程提前接触STEM。构建应用程序、开发游戏、编程机器人——这些活动为女孩们进入STEM领域奠定了坚实的基础。
45. Women Who Launched the Computer Age
(开创计算机时代的女性)
作者:Laurie Calkhoven
适合年龄: 6-8岁
本书讲述了6位在二战期间为美国军方从事秘密项目的天才女性。
46. Grace Hopper: Queen of Computer Code
(格雷斯·霍普:计算机代码女王)
作者:Laurie Wallmark
适合年龄: 5岁以上
格雷斯·霍普是一位有创造力的计算机科学家和数学家,也是一位授勋的海军军官和总统自由勋章获得者。孩子们会在她精彩的生活和成就中找到鼓励。
47. Girls Who Code: Learn to Code and Change the World
(学会编码并改变世界)
作者:Reshma Saujani
适合年龄: 10岁以上
Reshma Saujani是女孩编码组织“Girls Who Code”的创始人,她在本书中介绍了电脑和编码,以及在科技领域工作的女性的轶事。
培养儿童编码兴趣的通用读物
编码的孩子受益于问题解决、数学和决策能力。一些优秀的儿童计算机科学通用读物侧重于培养孩子对编码的兴趣。
48. Lauren Ipsum: A Story About Computer Science and Other Improbable Things
(劳伦·益普森:关于计算机科学和其他不可思议的故事)
作者:Carlos Bueno
适合年龄: 10岁以上
一个年轻的女孩需要找到回家的路,但要做到这一点,必须解决一个个难题……读者不知不觉中,接触到了编程逻辑、解决问题的技巧和其他计算机科学思想。
49. Once Upon an Algorithm
(从前有个算法)
作者:Martin Erwig
适合年龄:中学及以上
算法是解决问题的一组指令或过程。你可能觉得孩子们不太想看这个。但作者Martin Erwig通过类比、童话和电影引用,使算法变得有趣。
原文链接:
—完—
扩展阅读:
适合孩子学习编码的7款工具套件
干货|| 如何在线学习编码?看看这 11个优秀的编程资源网站
教孩子编码就够了吗?不!学校该培养的是计算思维
每个人都应该学习编码吗?吴恩达这样回答……
如果学生编程能力胜于老师,编码课该怎么教?
亲爱的朋友:
经常有读者咨询,有没有适合孩子的编码书推荐?
我们之前推荐过一些,但苦于无中文版,很多读者找不到购买方式。
今天的推荐,内容比较全面,我们可爱的小编找遍了资源,将能找到电子版都找到,一并送给你。
其余没有资源的,网上也可以买到。
如果本文对你有帮助,别忘了转发给你身边的朋友,让它帮助更多人。
祝安!
PS:为了方便与读者探讨,特意注册了一个专用号。如果你也是我们的铁杆读者,想探讨交流,可以加微信:znglmym。
智能观 灵米
2018-9-12 于北京中关村
想知道AI加教育领域有哪些最新研究成果?
想要AI领域更多的干货?
想了解更多专家的“智能观”?
请前往:www.智能观.com。
想交流沟通,请加负责人微信:znglmym
声明:
编译文章旨在帮助读者了解行业新思想、新观点及新动态,为原作者观点,不代表智能观观点。
转载智能观原创文章,请联系
智能观小艾(微信号:zng2017618)!
关于我们
我们关注AI+教育。致力于提供高附加值的知识,以帮助每一位老师和我们的读者不断学习并提高技能。
我们努力让发表的每一篇文章都具有最佳质量,以满足读者的需求。
package hao;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.io.File;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
public class ChatPanel extends JPanel {
private static final long serialVersionUID = 1L;
JButton send,record,saveRecord,image;
JTextArea inputArea;
JTextPane text;//注意用法****************************************************************************
JComboBox fontName = null, fontSize = null, fontStyle = null, fontColor = null,fontBackColor = null;
public StyledDocument doc = null; JScrollPane scrollPane;JPanel textChat;
JButton music;
public ChatPanel() {
setLayout(new BorderLayout());
text = new JTextPane();
text.setEditable(false);
doc = text.getStyledDocument();//跟踪文本和图片写到该区域的位置*************************************
scrollPane = new JScrollPane(text);
//注意下面对JComboBox的巧用***********************************************************************
String[] str_name = { "宋体", "黑体", "Dialog", "Gulim" };
String[] str_Size = { "12", "14", "18", "22", "30", "40" };
String[] str_Style = { "常规", "斜体", "粗体", "粗斜体" };
String[] str_Color = { "黑色", "红色", "蓝色", "黄色", "绿色" };
String[] str_BackColor = { "无色", "灰色", "淡红", "淡蓝", "淡黄", "淡绿" };
fontName = new JComboBox(str_name);
fontSize = new JComboBox(str_Size);
fontStyle = new JComboBox(str_Style);
fontColor = new JComboBox(str_Color);
fontBackColor = new JComboBox(str_BackColor);
fontName.setBackground(new Color(255,153,255));
fontSize.setBackground(new Color(255,153,255));
fontStyle.setBackground(new Color(255,153,255));
fontColor.setBackground(new Color(255,153,255));
fontBackColor.setBackground(new Color(255,153,255));
Box box = Box.createVerticalBox();//创建一个可以容纳多个Box组件的Box*******************************
Box box_1 = Box.createHorizontalBox();
Box box_2 = Box.createHorizontalBox();
Box box_4 = Box.createHorizontalBox();
box.add(box_1);
box.add(box_2);
box.add(box_4);
JLabel b1= new JLabel("字体~~"), b2 = new JLabel("样式~~"),b3 = new JLabel("字号~~"),b4 = new JLabel("颜色~~"),b5 = new JLabel("背景~~");
b1.setBackground(new Color(255,153,255));
b2.setBackground(new Color(255,153,255));
b3.setBackground(new Color(255,153,255));
b4.setBackground(new Color(255,153,255));
b5.setBackground(new Color(255,153,255));
box_1.add(b1);
box_1.add(fontName);
box_1.add(Box.createHorizontalStrut(8));
box_1.add(b2);
box_1.add(fontStyle);
box_1.add(Box.createHorizontalStrut(8));
box_1.add(b3);
box_1.add(fontSize);
box_2.add(Box.createHorizontalStrut(8));
box_2.add(b4);
box_2.add(fontColor);
box_2.add(Box.createHorizontalStrut(8));
box_4.add(b5);
box_4.add(fontBackColor);
textChat = new JPanel();
textChat.setLayout(new BorderLayout());
textChat.setBackground(new Color(255,153,255));
inputArea = new JTextArea(3, 20);
inputArea.setLineWrap(true); //设置文本区的换行策略。88888*********************************
send = new JButton("发送");
record=new JButton("显示记录");
saveRecord=new JButton("储存记录");
image=new JButton("表情");
send.setBackground(new Color(255,153,255));
record.setBackground(new Color(255,153,255));
saveRecord.setBackground(new Color(255,153,255));
image.setBackground(new Color(255,153,255));
Box box_3 = Box.createHorizontalBox();
box_3.add(send); box_3.add(Box.createHorizontalStrut(8));//设置按钮间距*************************888
box_3.add(record); box_3.add(Box.createHorizontalStrut(8)); //设置按钮间距*************************888
box_3.add(saveRecord); box_3.add(Box.createHorizontalStrut(8));//设置按钮间距*************************888
box_3.add(image);
box.setBorder(BorderFactory.createLineBorder(new Color(102,102,0),5));//设置Box的边框线********************
box_3.setBorder(BorderFactory.createLineBorder(new Color(102,102,0),5));
textChat.add(box,BorderLayout.NORTH);
textChat.add(inputArea,BorderLayout.CENTER);
textChat.add(box_3, BorderLayout.SOUTH);
inputArea.requestFocus(true);
inputArea.setBorder(BorderFactory.createLineBorder(new Color(102,102,0),5));//设置输入窗口边框线*******************
text.setBorder(BorderFactory.createLineBorder(new Color(102,102,0),8));//设置输入窗口边框线*******************
JPanel audioPanel = new JPanel();//最上面的边框************************************************************************
audioPanel.setBackground(new Color(255,153,255));
audioPanel.setLayout(new GridLayout(1,1));
music = new JButton("想听就听");
music.setPreferredSize(new Dimension(320,50));
music.setBorder(BorderFactory.createLineBorder(Color.BLACK,10));//设置输入窗口边框线*******************
audioPanel.add(music);
add(audioPanel, BorderLayout.NORTH);
add(scrollPane,BorderLayout.CENTER);
add(textChat, BorderLayout.SOUTH);
}
void insertIcon(ImageIcon image) {
text.setCaretPosition(doc.getLength());
text.insertIcon(image);
insert(new MessageStyle());//?????????????????????????????????????????????????????????????????????????????/
}
public void insert(MessageStyle attrib) {
try {
doc.insertString(doc.getLength(), attrib.getText() + "\n", attrib.getAttrSet());//写完后接着换行************
} catch (BadLocationException e) {
e.printStackTrace();
}
}
public MessageStyle getMessageStyle(String line) {
MessageStyle att = new MessageStyle();
att.setText(line);
att.setName((String) fontName.getSelectedItem());
att.setSize(Integer.parseInt((String) fontSize.getSelectedItem()));
String temp_style = (String) fontStyle.getSelectedItem();
if (temp_style.equals("常规")) {
att.setStyle(MessageStyle.GENERAL);
}
else if (temp_style.equals("粗体")) {
att.setStyle(MessageStyle.BOLD);
}
else if (temp_style.equals("斜体")) {
att.setStyle(MessageStyle.ITALIC);
}
else if (temp_style.equals("粗斜体")) {
att.setStyle(MessageStyle.BOLD_ITALIC);
}
String temp_color = (String) fontColor.getSelectedItem();
if (temp_color.equals("黑色")) {
att.setColor(new Color(0, 0, 0));
}
else if (temp_color.equals("红色")) {
att.setColor(new Color(255, 0, 0));
}
else if (temp_color.equals("蓝色")) {
att.setColor(new Color(0, 0, 255));
}
else if (temp_color.equals("黄色")) {
att.setColor(new Color(255, 255, 0));
}
else if (temp_color.equals("绿色")) {
att.setColor(new Color(0, 255, 0));
}
String temp_backColor = (String) fontBackColor.getSelectedItem();
if (!temp_backColor.equals("无色")) {
if (temp_backColor.equals("灰色")) {
att.setBackColor(new Color(200, 200, 200));
}
else if (temp_backColor.equals("淡红")) {
att.setBackColor(new Color(255, 200, 200));
}
else if (temp_backColor.equals("淡蓝")) {
att.setBackColor(new Color(200, 200, 255));
}
else if (temp_backColor.equals("淡黄")) {
att.setBackColor(new Color(255, 255, 200));
}
else if (temp_backColor.equals("淡绿")) {
att.setBackColor(new Color(200, 255, 200));
}
}
return att;
}
}
package importantpg;
import java.awt.*;
import java.awt.event.*;
public class jisuanqi
{
TextArea tf=new TextArea(3,50 );
Button lb=new Button("clear");
Panel p1=new Panel();
Panel p2=new Panel();
public jisuanqi()
{ Frame f=new Frame("计算器");
Panel p=new Panel();
f.setBackground(Color.white);
f.setSize(500, 1500);
f.setVisible(true);
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e) {System.exit(1);}
});
Button[] b=new Button[18]; b[10]=new Button("-"); b[15]=new Button("(");
b[11]=new Button("+"); b[12]=new Button("*"); b[16]=new Button(")");
b[13]=new Button("/"); b[14]=new Button("="); b[17]=new Button("退格");
for(int i=0;i=9;++i)
{
b[i]=new Button(""+i);
}
p.setLayout(new GridLayout(6,3));
avent aa=new avent();
lb.addActionListener(aa);
for(int i=0;i18;++i)
{
p.add(b[i]);b[i].addActionListener(aa);
}
p1.setLayout(new BorderLayout());
p1.add(lb,"North");p1.add(tf,"South");f.add(p1, "South");
f.add(p,"Center"); f.pack();
} //构造方法
public static void main(String args[])
{
new jisuanqi();
}
class avent implements ActionListener //事件体
{
public void actionPerformed(ActionEvent e)
{
String s=null; String in="";
s=e.getActionCommand();
if (s!="="s!=nulls!="clear"s!="退格")
{
tf.append(s);
in+=s; s=null;
}
else if(s=="clear")
{
tf.replaceRange("",0,1000);
}else if(s=="=")
{
tf.append("="+jisuan(tf.getText()));
}
else if(s=="退格") {}
}///////////////////////////////////////////////事件处理方法
}
///////////////////////////////////////计算过程//////////////
static String jisuan(String s)
{
String hs= "";
char[] ch = new char[s.length()];
int top = -1;
for (int i = 0; i s.length(); i++)
{
char rsc = s.charAt(i);
switch(rsc)
{
case ' ' : break;
case '+' : //操作符
case '-' :
while (top = 0) //栈不为空时
{
char pc = ch[top--]; //pop Operator
if (pc == '(')
{
ch[++top] = pc; //push Operator
break;
}
else {hs = hs + pc;}
}
ch[++top] = rsc; //push Operator
hs += " ";break;
case '*' : //操作符
case '/' :
while (top = 0) //栈不为空时
{
char c = ch[top--]; //pop Operator
if (c == '(')
{
ch[++top] = c; //push Operator
break;
}
else
{
if (c == '+' || c == '-')
{
ch[++top] = c; //push Operator
break;
}
else
{
hs = hs + c;
}
}
}
ch[++top] = rsc; //push Operator
hs += " ";
break;
case '(' : //操作符
ch[++top] = rsc;
hs+= " ";
break;
case ')' : //操作符
while (top = 0) //栈不为空时
{
char c = ch[top--]; //pop Operator
if (c == '(')
{
break;
}
else
{
hs= hs + c;
}
}
hs += " ";
break;
default : //操作数
hs= hs + rsc;
break;
}//switch
}/////////////////////////////for
while (top = 0)
{
hs= hs + ch[top--]; //pop Operator
}
//System.out.println("hs="+hs); //后缀
//////////////////////////////////////////////后缀////////////////////////////////////
//后缀表达式计算
double[] result = new double[hs.length()];
double x, y;
top = - 1;
String st = "";
for (int i = 0; i hs.length(); i++)
{
char c = hs.charAt(i);
if ((c = '0' c = '9') || c == '.')
{
st += c;
}
if ((c == ' ' st != "") || i == hs.length() - 1)
{
result[++top] = Double.parseDouble(st) ; //push Operands
st = "";
}
if (c == '+' || c == '-' || c == '*' || c == '/')
{
if ((st != ""))
{
result[++top] =Double.parseDouble(st) ; //push Operands
st = "";
}
y = result[top--];
x = result[top--];
switch (c)
{
case '+' :
result[++top] = x+y;break;//push 中间结果再次入栈
case '-' :
result[++top] = x-y;break;
case '*' :
result[++top] = x*y;break;
case '/' :
result[++top] = x/y;break;
default :break;
}
}////////////////////if
} ///////////////////////for
return String.valueOf(result[top]); //pop 最终结果
} /////////////////////////jisuan
}