用do while语句编程,输入一组整形数据,然后显示每次将输入数据进行累加运算后的结果。当输入0时,停止输入数据,结束程序的运行。
输入格式要求:“%d" 提示信息:"Input num:"
输出格式要求:"sum = %d\n"
程序运行示例如下:
Input num:1
sum = 1
Input num:2
sum = 3
Input num:3
sum = 6
Input num:4
sum = 10
Input num:0
sum = 10
用do while语句编程,输入一组整形数据,然后显示每次将输入数据进行累加运算后的结果。当输入0时,停止输入数据,结束程序的运行。输入格式要求:“%d" 提示信息:"Input num:"输出格式要求:"sum = %d\n"程序运行示例如下:Input num:1sum = 1Input num:2sum = 3Input num:3sum = 6Input num:4sum = 10Input num:0sum = 10...
2. Unicode和UTF-8
3. 在Linux C
编程
中使用Unicode和UTF-8
B. GNU Free Documentation License Version 1.3, 3 November 2008
掌握 Shell 脚本的基本操作
结合实际案例展示 Shell 脚本编写的最佳实践
;Shell 中的字符;变量;变量的类型;使用变量;扩展变量;变量的赋值与输出;Shell 的算术扩展;在 Shell 中计算时间;算术
运算
常用表达式;算术
运算
的优先级;变量递增的前置后置区别;熟悉 Shell 基础知识
掌握 Shell 脚本的基本操作
结合实际案例展示 Shell 脚本编写的最佳实践
;Shell 中的结构化命令;条件
语句
;多分支判断
语句
;循环
语句
;for 循环;for 循环中的列表;for 循环奇数
累加
器;for 循环文件展示;while 循环;until 循环;使用循环打印乘法表;谢谢
示例描述:本章演示如何开始使用JDK
进行
程序的开发。
HelloWorldApp.java 第一个用Java开发的应用程序。
firstApplet.java 第一个用Java开发的Applet小程序。
firstApplet.htm 用来装载Applet的网页文件
示例描述:本章介绍开发Java的基础语法知识。
accumulationByDoWhile.java 用do~while
语句
写的
累加
程序
accumulationByFor.java 用for
语句
写的
累加
程序
accumulationByWhile.java 用while
语句
写的
累加
程序
boolExample.java 演示boolean变量的程序
charExample.java 演示char变量的程序
compare.java 演示前缀、后缀自加之间区别的程序
constCharExample.java 演示转义字符
converseNumber.java 逆向输出数字
daffodilNumber.java 求水仙花数
division.java 演示整除结果
errorCompoundVariable.java 错误使用局部变量示例
factorial.java 求阶乘
Fibonacci.java 求Fiblnacci数列
GcdAndGcm.java 求最大公约数和最小公倍数
errorInit.java 演示变量初始化错误的程序
integerExample.java 演示各种整型变量的使用
isPrime.java 判断素数
leapYearByIf.java 用if
语句
判断闰年
leapYearByLogical.java 用逻辑表达式判断闰年
lowToUpper.java 小写字母转换成大写字母
lozengeStar.java 输出一个由*组成的菱形
multiplyTable.java 求乘法口诀表
narrowingConversion_1.java 缩减转换引发错误示例1
narrowingConversion_2.java 缩减转换引发错误示例2
notMultipleOfThree.java 把100-200之间不能被3整除的数输出
outputByDoWhile.java 用while循环随机输出
数据
outputByWhile.java 用do~while循环随机输出
数据
outputMax.java 求两个数中的最大数
overflowExample.java 演示溢出
precedence.java 演示自加
运算
符的优先级
primeNumber.java 输出100-200之间的所有素数
ranking.java 评定成绩等级
rankingBySwitch.java 用switch
语句
评定成绩等级
realExample.java 演示浮点数的有效位数
remainder.java 取余
运算
示例
showBreak.java 利用标号
语句
跳转出所有循环嵌套
showCount.java 循环计数示例
showDoubleLoop.java 演示双重循环
showDoubleLoopSe.java 改进的双重循环
showOrder_1.java 演示操作数求值顺序示例1
showOrder_2.java 演示操作数求值顺序示例2
sign.java 用条件
运算
实现符号函数示例
signByIF.java 用if
语句
实现符号函数示例
triangleStar.java 输出一个由*组成的直角三角形
upperToLowCase.java 大写转换成小写
variableScopeExample.java 变量使用范围示例
示例描述:本章学习对象和类。
accessMember.java 访问成员变量示例
constructNoPara.java 无参数的构造方法
constructWithPara.java 带参数的构造方法
declareDefault.java 缺省访问权限的使用
declarePrivate.java 私有访问权限的使用
declareProtected.java 保护访问权限的使用
deriveClass.java 子类访问父类变量示例
getLinePara.java 获取命令行参数示例
hasStaticMethod.java 静态成员方法示例
hasStatMember.java 静态成员变量示例
HelloNative.c 用C写的一个小程序
HelloNative.dll 用C生成的DLL文件
HelloNative.exp 用VC编译生成的辅助文件
HelloNative.h 用javah生成的C语言用的头文件
HelloNative.java 准备调用C函数的java文件
HelloNative.lib 用VC编译生成的静态库文件
HelloNative.obj 用VB编译生成的目标文件
HelloNativeTest.java 测试本地化是否成功的类文件
instanceVar.java 定义一个实例成员变量
invokeByObject.java 对象实参传递示例程序
invokeByValue.java 传值调用示例程序
invokeMethod.java 同一个类中调用方法示例
invokeOther.java 类的外部调用方法示例
invokeStaticMethod.java 调用静态方法示例
localVariable.java 演示局部变量
localVSmember.java 局部变量与成员变量同名问题示例
onlyTest.java 对象传值示例
otherClass.java 从类的外部访问对象的成员
showInstVar.java 演示不同的对象拥有不同的成员变量
showMain.java 演示main方法访问本类成员
showMethod.java 演示如何定义一个方法体
showReturn_1.java return
语句
示例1
showReturn_2.java return
语句
示例2
showStaicVar.java 演示静态变量的使用
staticBlock.java 演示静态块的使用
staticVar.java 定义静态变量
supplyTest.java 对象作为静态成员使用示例
trySwap.java 试图交换两个形参的值
useOnlyTest.java 创建多个对象,演示this的作用
useStaticBolck.java 使用静态块
useStVar.java 使用静态成员变量
示例描述:本章学习继承与多态。
absClass.java 抽象类定义示例
ancestor.java 基类定义示例1
ancestor_1.java 另一个基类定义
anonymousInner.java 匿名内部类
base.java 定义一个基类
BaseColors.java 一个简单的接口
basePoint.java 一个测试用的基类
Colorable.java 一个子接口
ColoredPoint.java 一个测试用子类
common.java 一个公用类
derive.java 一个测试用子类
differ.java 测试静态方法与实例方法之间的区别
forefather.java 一个简单的基类
grandson.java 上面这个类的子类
hasConstructor.java 拥有构造器的类
hasFinalFun.java 拥有最终方法的类
hasRecall.java 可以完成回调功能的类
HasStatic.java 一个简单的拥有静态成员的类
hideMember_1.java 成员隐藏示例1
hideMember_2.java 成员隐藏示例2
hideMember_3.java 成员隐藏示例3
hideMember_4.java 成员隐藏示例4
hideMember_5.java 成员隐藏示例5
implementABS.java 继承一个抽象类
impRecall.java 实现回调函数
inheritConstruct_1.java 构造器继承示例1
inheritConstruct_2.java 构造器继承示例2
inheritConstruct_3.java 构造器继承示例3
inheritConstruct_4.java 构造器继承示例4
inheritConstruct_5.java 构造器继承示例5
inheritConstruct_6.java 构造器继承示例6
inheritor.java 子类覆盖父类示例
inPack.java 包示例
LotsOfColors.java 定义一个子接口
matching.java 重载解析示例
notInPack.java 用前缀引用包中的类
onlyShow.java 一个简单的接口
Outer_1.java 外部类示例1
Outer_2.java 外部类示例2
Outer_3.java 外部类示例3
Outer_4.java 外部类示例4
Outer_5.java 外部类示例5
Outer_6.java 外部类示例6
Outer_7.java 外部类示例7
Outer_8.java 外部类示例8
overrideMember_1.java 成员方法覆盖示例1
overrideMember_2.java 成员方法覆盖示例2
overrideMember_3.java 成员方法覆盖示例3
overrideMember_4.java 成员方法覆盖示例4
overrideMember_5.java 成员方法覆盖示例5
Paintable.java 实现了多个接口的方法
PaintedPoint.java 实现了多个接口的方法
Point.java 一个简单的类
PrintColors.java 一个子接口
RainbowColors.java 一个子接口
realPoint.java 一个子类
second.java 属于一个命名包的类
showDiff.java 演示隐藏与覆盖之间的区别
showSomething.java 测试运行时多态
stupid.java 试图覆盖最终方法的类,它有错误
Sub.java 一个简单的子类
Super.java 一个基类
testOverload.java 测试方法的重载示例1
testOverload_1.java 测试方法的重载示例2
testOverload_2.java 测试方法的重载示例3
testOverload_3.java 测试方法的重载示例4
useConstructor.java 使用构造器
useHideMember_2.java 试图使用隐藏的成员变量
useInner.java 使用内部类
示例描述:本章学习数组与字符串。
ArrayString.java 字符串数组
assignTwoDime.java 为二维数组赋值
getMaxElem.java 获取数组中的最大元素
incCapicity.java 演示StingBuffer的容量增长
SortDemo.java 排序示例
travelTwoDime.java 遍历二维数组
traversing.java 遍历一维数组
useStrBuf.java 使用StringBuffer示例
useString.java 使用String示例
YanghuiTri.java 构造和
显示
杨辉三角
示例描述:本章学习Java的异常处理。
demoException_1.java 异常示例1
demoException_2.java 异常示例2
demoException_3.java 异常示例3
demoException_4.java 异常示例4
demoException_5.java 异常示例5
divZeroError.java 除零异常
hasCheckException.java 检查型异常
MyException.java 用户自定义异常
myInput.java
输入
数据
示例
nestException_1.java 异常嵌套示例1
nestException_2.java 异常嵌套示例2
nestException_3.java 异常嵌套示例3
outBoundError.java 下标越界异常
throwException.java 抛出异常示例
throwsException.java 声明抛出异常
useMyException.java 使用自定义异常
示例描述:本章学习Java的
输入
和输出。
CopyFile.java 文件复制实例
dir.java
显示
目录下的所有文件和目录
encrypt.java 文件加密
FileList.java 自己实现的一个文件名称枚举类
MyDataIO.java
数据
输入
输出示例
MyFileOutput.java 将键盘读入的文字保存到文件
MyPipedIO.java 管道流示例
MySequenceIn.java 顺序
输入
流示例
ObjectFileTest.java 序列化对象示例
ReadAndWrite.java 读入和写出
数据
ReadAndWriteFile.java 读入
数据
写出到文件
Student.java 定义一个用来序列化的类
ThreadIn.java 接收
数据
用的线程类
ThreadOut.java 发送
数据
用的线程类
TypeFile.java
显示
文件内容的类
useScanner.java 用Scanner接收用户的
输入
示例描述:本章学习多线程。
enhanceThread.java 一个自己定义的增强型线程类
ThreadImRunnable.java 继承Runnable接口实现多线程
mulThread.java 创建多个线程对象的类
demoJoin.java 演示使用join()以确保主线程最后结束
clicker.java 一个计数用的线程类
demoPri.java 调用上面这个类设置线程优先级示例
myThread.java 自己定义的一个Thread的子类
mutexThread.java 一个能管理临界区的线程类
demoMutex.java 使用上面这个类来演示线程的互斥
commSource.java 一个共享资源的类
demoSynchrony.java 演示线程的同步
setDataThread.java 设置
数据
的线程类
readDataThread.java 读取
数据
的线程类
demoEnhanceThread.java 使用自己定义的线程类示例
producer_consumer.java 演示生产者-消费者线程
consumer.java 消费者线程
producer.java 生产者线程
common.java 公有类
示例描述:本章学习运行时类型识别。
Candy.java 一个用来测试的简单类
changeFields.java 改变属性值示例
Circle.java 一个用于测试的简单类
DumpMethods.java 使用反射机制来获取类中的方法
getClassName.java 利用反射机制获取类的名字
invokeConstructor.java 利用反射机制调用构造器
invokeMethod.java 利用反射机制调用成员方法
listConstructors.java 利用反射机制获取构造器列表
listFields.java 利用反射机制获取成员属性列表
listMethods.java 利用反射机制获取成员方法列表
loadClass.java 动态装载一个类
Shape.java 一个用于测试的简单类
useArray1.java 用反射机制使用数组示例1
useArray2.java 用反射机制使用数组示例2
示例描述:本章学习泛型。
demoBounds.java 演示有界类型
demoForceChange.java 演示强制类型转换
demoGeneric.java 泛型类的使用示例
demoGenIF.java 测试泛型类
demoGenMethods.java 泛型方法示例
demoHerit_1.java 泛型类继承示例1
demoHerit_2.java 泛型类继承示例2
demoRTTI_1.java 泛型类的类型识别示例1
demoRTTI_2.java 泛型类的类型识别示例2
demoWildcard.java 通配符使用示例
demoWipe.java 擦拭示例
derivedGen.java 泛型父类继承示例
derivedNonGen.java 非泛型父类继承示例
foo.java 一个有错误的类
Gen.java 无限界的泛型擦拭
Generic.java 一个简单的泛型类
genMethod.java 一个泛型方法
GenStr.java 有限界的泛型擦拭
MinMax.java 泛型接口示例
MyClass.java 实现一个泛型接口
nonGen.java 以非泛型类为父类
simpGen.java 使用泛型类示例
Stats.java 一个有界类泛型
superGen.java 父类是泛型
twoGen.java 有两个参数的泛型类
示例描述:本章学习集合。
CompareScore.java 实现比较器接口
demoAlgorithm.java 集合中简单算法示例
demoArrayList.java 链表使用示例
demoBinSearch.java 二分查找示例
demoEnumSet.java 枚举类型示例
demoHashMap.java 哈希映射示例
demoHashSet.java 哈希集合示例
demoSort.java 排序示例
demoTreeMap.java 树映射示例
demoTreeSet.java 树集合示例
demoVector.java 向量使用示例
job.java 模拟操作系统的进程调度
monkey.java 用链表求猴子选大王
myCompare.java 自己实现的比较器接口
reverseString.java 利用栈将字符串逆序输出
scheduling.java 模拟操作系统的作业调度过程
showClothValue.java 根据用户
输入
型号输出相应的价格
Size.java 一个枚举类
Student.java 用于记录学生信息的类
示例描述:本章学习类型包装器、自动装箱和元
数据
。
demoAnno.java 给方法做注释示例
demoAutoBox_1.java 自动装/拆箱机制示例1
demoAutoBox_2.java 自动装/拆箱机制示例2
demoAutoBox_3.java 自动装/拆箱机制示例3
demoInteger.java 整数类型包装器使用示例
demoSingle.java 单成员注释使用示例
DeprecatedClass.java Deprecated注释示例
InProgress.java Documented元注释使用示例
Marker.java 一个被注释的接口
Meta.java 利用反射机制获取方法的注释
MetaAll.java 获取所有注释示例
MyAnno.java 包含了默认值的注释
MyMarker.java 标记注释使用示例
MySingle.java 单成员注释使用示例
OverrideTester.java Override注释示例
SuppressWarningsTester.java SuppressWarnings注释示例
TODO.java Target元注释使用示例
What.java
显示
全部注释
示例描述:本章学习常用工具类。
checkEmail.java 利用正则表达式检验Email的合法性
currentTime_1.java
显示
时间示例程序1
currentTime_2.java
显示
时间示例程序2
currentTime_3.java
显示
时间示例程序3
DateAndTime.java 用Calendar
显示
当前的日期和时间
demoFmtTime.java 使用时间格式转换符输出日期和时间
demoFormatter.java Formatter简单输出示例
demoGroup.java 组匹配使用示例
demoMathing.java 匹配方法使用示例
demoMemory.java 内存管理示例程序
demoPattern_1.java Pattern使用示例1
demoPattern_2.java Pattern使用示例2
demoRandom.java 产生随机数序列示例
demoReplace.java 替换方法使用示例
demoRound.java 取整函数使用示例
elapsed.java 计算程序运行时间
exitJVM.java 从子线程中退出虚拟机
getPI.java 利用随机数求π值
progPI.java 利用反正切函数求π的值
runNotepad.java 启动记事本
showCalendar.java 用GregorianCalendar实现一个万年历
showProperties.java 获取环境属性
textToTime.java 从文本串创建日期对象
useLog.java 利用换底公式求任意对数值
示例描述:本章学习GUI程序设计。
addNodeInJTree.java 在JTree中增加节点示例
AlarmClock.java 小闹钟程序
AWTComponents.htm 为
显示
AWT组件而编制的网页文件
AWTComponents.java AWT组件示例
AWTFrame.java 用AWT编写的一个简单窗口
CheckAchromatopsiat.java 色盲检测程序
demoBorderLayout.java 边框布局使用示例
demoCardLayout.java 卡片布局使用示例
demoGridBagLayout.java 增强网格布局使用示例
demoGridLayout.java 网格布局使用示例
demoJApplet.htm 运行JApplet的网页文件
demoJApplet.java JApplet使用示例
demoJButton.java 按钮使用示例
demoJCheckbox.java 复选框使用示例
demoJComboBox.java 组合框使用示例
demoJDialog.java 对话框使用示例
demoJFrame.java JFrame简单使用示例
demoJLabel_1.java 图像标签使用示例
demoJLabel_2.java 改变标签上鼠标形状示例
demoJList.java 列表框使用
demoJMenu.java 菜单使用示例
demoJPanel.java 面板使用简单示例
demoJRadioButton.java 单选按钮使用示例
demoJScrollPane_1.java 在JScrollPane创建时添加组件示例
demoJScrollPane_2.java 通过add()方法添加组件示例
demoJSplitPane_1.java 分隔板简单示例1
demoJSplitPane_2.java 分隔板简单示例2
demoJTabbedPane.java 选项板使用示例
demoJTable_1.java 表格使用示例1
demoJTable_2.java 表格使用示例2
demoJTable_3.java 表格使用示例3
demoJTable_4.java 表格使用示例4
demoJTable_5.java 表格使用示例5
demoJText.java 文本框和密码框使用示例
demoJTextArea.java 文本区使用示例
demoJToolBar.java 工具栏使用示例
demoJTree.java 创建JTree示例
ExampleFileFilter.java Sun公司提供的一个文件名过滤器
findDialog.java 查找对话框
fontDialog.java 字体选择对话框
MyTableModel.java 本类实现了一个表格用的模型,取代默认的模型
Notebook.java 记事本
painting_1.java 在面板上画出简单图形示例1
painting_2.java 在面板上画出图形示例2
reMulEvent.java 响应单击按钮事件
showTriDialog.java 用系统预定义的对话框
本章下面还有一些
编程
要用到的图片和声音文件,不一一列出。
示例描述:本章学习多媒体程序设计。
building.java 调用另外一个houseCanvas类画出一栋房子
CombinerCanvas.java 编写自己的画布,所要
显示
的图片在此画布上
显示
CombinPic.java 合成两幅图片
DrawArcs.java 画椭圆和圆弧示例
DrawLines.java 画直线示例
DrawPoly.java 画多边形示例
DrawRects.java 画矩形示例
fadeInOut.java 淡入淡出效果示例
FillArea.java 填充图形示例
FontsCanvas.java 自行管理字体的画布
GetFonts.java 获取系统中安装的字体示例
GrayFilter.java 自己实现的GrayFilter类
GrayModel.java 实现一个具备灰度变换功能的Model
houseCanvas.java 用直线画出一栋房子
illumination.java 光照特效示例
LightingLiteral.java 字体特效
显示
示例
ManageFonts.java 自行管理字体示例
mixing.java
显示
色彩混合效果
playAudio.java 在Application中播放声音文件
playMP3.java 增强的声音播放文件
playMusic.htm 可以播放背景音乐的一个网页
playMusic.java 利用AudioClip播放声音文件
playVideo.java 媒体播放器编写示例
ResizeOval.java 缩放图形示例
ShowFonts.java 建和使用字体示例
SoundBase.java 将Java Sound API封装在一个线程中
TransparencyExample.java 为实现色彩混合效果而定义的画布
viewPic.java 用标签
显示
图像示例
本章下面还有一些
编程
要用到的图片和声音文件,不一一列出
示例描述:本章学习
数据
库程序设计。
AddressList.java 学生信息管理系统实例
deleteData.java 从
数据
库中删除记录
FirstExample.mdb 本章用到的
数据
库文件
insertData.java 向
数据
库中添加新
数据
queryData.java 查询
数据
示例
updateData.java 修改
数据
示例
示例描述:本章学习C/S网络程序设计。
chatClient.java 聊天客户端程序
chatServer.java 聊天服务端程序
Client.java 一个简单的客户端程序
DownFile.java 文件下载示例
GetHostName.java 根据IP查找主机名
GetIP.java 根据域名查找IP地址
GetMyIP.java 获取本机IP地址
MultiServer.java 可以响应多个客户端的服务程序
myBrowser.java 一个简单的浏览器
Server.java 一个简单的服务端程序
ServerThread.java 一个服务端的线程类
UDPChat.java 用UDP实现的聊天程序示例
示例描述:本章学习JSP程序设计。本章所有文件均已经按照Tomcat网站部署的要求放置在各自的目录下,然后打包成ZIP文件。读者只需要解包后放置在某一分区中,然后在Tomcat中配置好入口就可以使用。
下面的文件均放置在ROOT目录下面
ArbitraryObject.java 实现一个事件监听者接口的类
calendar.jsp 用JSP实现的日历
count.txt 站点计数器保存的
数据
文件
counter.jsp 用JSP实现的计数器
faq.java 连接
数据
库用的JavaBean
leaveword.htm 留言板的主页面
Model.java 自己定义的事件源类
ModelChangedListener.java 自己定义的一个事件监听者接口
MouseMovedExampleEvent.java 事件状态对象示例
MouseMovedExampleListener.java 鼠标事件监听者接口与事件监听者示例
OurButtonCustomizer.java 实现一个“按钮”Beans的定制器
query.jsp
数据
库查询程序
saveword.java 用于保存记录的JavaBean
saveword.jsp 后台保存
数据
的JSP文件
viewword.jsp 查看留言的JSP页面
WeekDayBeanInfo.java 实现BeanInfo接口示例
WeekDayEditor.java 实现属性编辑器接口
下面的文件均存放在chat目录下,是聊天室的组成文件。
chatreg.java 用户注册用到的JavaBean文件
chatreg.jsp 用户注册的前台JSP文件
chatregcof.jsp 用户注册检查JSP文件
chatroom.jsp 聊天室的主页面
confirm.jsp 检查登录是否正确的JSP文件
in.jsp 即将进入聊天室前的提示页面
listuser.jsp
显示
聊天室内的所有用户名的JSP文件
logout.jsp 清除用户的相关信息
netchat.jsp 用户进入聊天室的界面文件
showmsg.jsp
显示
各个用户所说的话
talk.jsp 用户聊天用的JSP文件
示例描述:本章是一个IM软件的完整代码。
ChatFrame.java 聊天用的主界面程序
ClientManageFrame.java 是好友管理窗口,也是客户端程序的主窗口
DBConnection.java 连接
数据
库用的JavaBean
FindUserDlg.java 查找好友对话框
FindUserInfo.java
显示
用户基本信息
FriendLabel.java 在list列表中
显示
用户的头像和字符信息
Login.java 用户登录界面
LoginUser.java 定时器的任务类,用于定时获取上线的用户的信息
MyInfo_AboutBox.java
显示
作者信息
ReceiveOthersDialog.java 当用户收到陌生人的消息时,这个类向用户提示
RegisterDialog.java 用户注册面板
Server.java 提供各种服务的类
ServerFrame.java 服务器端的主界面
ServerThread.java 与客户端通讯的线程
SetCenter.java 将窗口设置在屏幕中央的类
showTimeTask.java 刷新时间的类
StartServer.java 启动服务器的主类
UpdateDialog.java 更新用户信息的对话框
UserInfo.java 获取用户信息的类
UserInfoBean.java 保存用户信息的一个JavaBean
JS的发展史:
1、1992年 Nombas 开发了一款语言 ScriptEase
2、1995年 Netscape(网景) 开发了一款语言 LiveScript,更名为 Javascript
3、1996年 Microsoft(微软) 开发了一款语言 JScript
4、1997年 网景 将Javascript 1.1 提供给了ECMA(欧洲计算机制造商联合会),ECMA 获取了 JS 的核心,称之为 ECMA Script (ES)
完整的JS组成:
1、核心(ES)
2、文档对象模型(Document Object Model) - DOM
允许让 JS 与 HTML 文档打交道
3、浏览器对象模型(Browser Object Model) - BOM
允许让 JS 与 浏览器
进行
交互
JS是一款基于对象的
编程
语言
2、JS的基础语法
1、浏览器内核
内核负责页面内容的渲染,由以下两部分组成:
1、内容排版引擎 - 解析HTML/CSS
2、脚本解释引擎 - 解析Javascript
2、搭建JS运行环境(重点)
1、独立安装的JS解释器 - NodeJS
console.log("Hello World");
console.log('Hello World');
2、使用浏览器中的内核(JS解释引擎)
1、在浏览器的控制台(Console)中,
输入
脚本并执行
2、将JS脚本代码嵌入在HTML页面中执行
1、采用HTML元素事件执行JS代码
1、onclick
当元素被点击时执行的操作
ex: 当按钮被点击时,在控制台中输出 Hello World
2、将JS脚本编写在 [removed][removed] 并嵌入在HTML文档的任何位置
[removed]
console.log("... ...");
[removed]("Hello Wolrd");
[removed]
3、将JS脚本编写在外部独立的JS脚本文件中(***.js)
1、编写JS脚本文件
2、在HTML中引入脚本文件
[removed][removed]
1、先创建一个 base.js 的文件
2、在文件中执行以下代码
console.log(" .... ... ");
[removed](" ... ... ");
window.alert("这是在外部脚本文件中的内容");
3、在 html 文档中,引入 base.js 文件
3、JS调试
当代码编写出现错误时,在运行的时候,在错误位置会停止
碰到错误代码,会终止当前
语句
块的执行,但不影响后续块的执行
[removed][removed] 为一块
4、JS语法
1、
语句
- 可以被JS引擎执行的最小单元
由表达式、关键字、
运算
符 来组成的
严格区分大小写 :name 和 Name
所有的
语句
都是以 ; 来表示结束
所有的标点符号都是英文的
; 和 ;
. 和 。
: 和 :
" 和 “
' 和 ‘
() 和 ()
[] 和 【】
{} 和 {}
单行注释: //
多行注释: /* */
3、变量 与 常量
1、什么是变量
用来存储
数据
的一个容器
2、声明变量(重点)
1、声明变量
var 变量名;
2、为变量赋值
变量名=值;
3、声明变量并赋初始值
var 变量名=值;
1、变量在声明时没有赋值的话,那么值为 undefined
2、声明变量允许不使用var关键字,但并不推荐
1、创建一个网页 04-variable.html
2、声明一对 [removed][removed],并完成以下变量的声明
1、声明一个变量用于保存用户的姓名,并赋值为 "张三丰";
2、声明一个变量用于保存用户的年龄,赋值 68
3、如何 将变量的
数据
打印在控制台上??
4、一条
语句
中声明多个变量
var 变量名1=值,变量名2=值,变量名3;
3、变量名命名规范
1、由字母,数字,下划线以及 $ 组成
var user_name; 正确
var user-name; 错误
var $uname; 正确
2、不能以数字开头
var 1name;错误
3、不能使用JS中的关键字 和 保留关键字
4、变量名不能重复
5、可以采用"驼峰命名法",小驼峰命名法使用居多
6、最好见名知意
var a;
var uname;
4、变量的使用
1、为变量赋值 - SET操作
只要变量出现在 赋值符号(=)的左边一律是赋值操作
var uname="张三丰";
uname="张无忌";
2、获取变量的值 - GET操作
只要变量没有出现在赋值符号(=)的左边,一律是取值操作
var uname="wenhua.li";//赋值操作
console.log(uname);
var new_name = uname;
new_name 是赋值操作
uname 是取值操作
uname = uname + "bingbing.fan";
赋值符号出现的话,永远都是将右边的值,赋值给左边的变量(从右向左
运算
)
1、什么是常量
在程序中,一旦声明好,就不允许被修改的
数据
2、声明常量
const 常量名=值;
常量名在命名时采用全大写形式
1、声明一个变量 r ,来表示一个圆的半径,并赋值
2、声明一个常量PI ,来表示圆周率3.14
3、通过 r 和 PI 来计算 该圆的周长,保存在变量l中
周长 = 2 * π * 半径
4、通过 r 和 PI 来计算 该圆的面积,保存在变量s中
面积 = π * r * r;
5、在控制台中打印输出
半径为 * 的圆的周长是 *
半径为 * 的圆的面积是 *
1、定义一个函数 change ,该函数中接收两个参数(a,b)
2、在函数体中,如果 a 大于 b的话,则交换两个数字的位置,再打印输出结果
3、通过一个按钮调用函数,并且将 两个数字传递给函数
4、常用带参函数
parseInt(变量);
parseFloat(变量);
Number(变量)
console.log("");
3、带返回值的函数
var result = parseInt("35.5");
1、什么是返回值
由函数体内 带到 函数体外的
数据
,叫做"返回值"
function 函数名(参数列表){
语句
块;
return 值;
允许通过一个变量来接收调用函数后的返回值
var 变量名 = 函数名(实参列表);
定义一个可以接收三个Number参数的方法(名称为getMax),在该方法中,计算并返回 最大的数值
3、作用域
1、什么事作用域
指的是变量和函数的可访问范围,作用域分为以下两类
1、函数作用域
只在定义的函数内允许访问变量 和 函数
2、全局作用域
一经定义,在任何位置处都能访问
2、函数作用域中的变量
在某个函数中声明的变量,就是函数作用域中的变量,也可以称之为 "局部变量"。
function calSum(){
var a = 3;
var b = 5;
console.log(a,b); // 输出 3 5
console.log(a,b); //错误,因为 a ,b已经出了它的定义范围
1、定义一个 函数calSum,声明两个变量a,b,并赋值,并且在函数内打印两个变量
2、定义一个 函数calMax,直接打印输出 a,b,观察结果
3、全局作用域中的变量
一经声明了,任何位置都能使用。也称为 "全局变量"
声明方式:
1、将变量声明在最外层,所有的function之外
[removed]
var a = 15;
var b = 18;
function showMsg(){
console.log(a);
console.log(b);
[removed]
2、声明变量时,不使用var关键字,一律是全局变量,但有风险
全局变量 ,尽量都声明在 所有的 function 之外
声明变量时,也一律都使用 var 关键字
4、声明提前
function show(){
console.log(num);//报错
1、什么是声明提前
JS程序在正式执行前,会将所有var声明的变量以及function声明的函数,预读到所在作用域的顶端。但赋值还保留在原位置上
最好将变量的声明 和 函数的声明都集中到所在作用域的最顶端
5、按值传递
function change(a,b){
a ^= b;
b ^= a;
a ^= b;
console.log("在change函数中");
console.log(a,b);
function testChange(){
var a = 15;
var b = 18;
console.log("调用前:");
console.log(a,b);//15 18
change(a,b);
console.log("调用后:");
console.log(a,b);//15 18
1、什么是按值传递
基本
数据
类型的数字在做参数传递时,实际上时传递的实参的副本到函数中,原始
数据
并未发生过改变
基本
数据
类型的
数据
在做参数传递时,尽量不要在函数中修改,因为即便修改,也不会影响原
数据
的
6、局部函数
将函数 再声明在某个函数内,就是局部函数
[removed]
function show(){
function inner(){
console.log("show 中的 inner 函数");
inner();//正确
inner(); // 错误,inner 是局部函数,只能在 show中被调用
[removed]
7、全局函数
ECMAScript预定义的全局函数,可供用户直接使用
1、paseInt();
2、parseFloat();
3、Number();
4、isNaN();
5、encodeURI()
URL:Uniform Resource Locator :统一资源定位符/器
URI:Uniform Resource Identifier : 统一资源标识符
对统一资源标识符格式的字符串
进行
编码,并返回编码后的字符串
编码:将多字节的字符,编译成多个单字节的字符
6、decodeURI()
对已编码的URI
进行
解码(将已编码内容再转换回中文)
7、encodeURIComponent()
在 encodeURI 基础之上,允许将 特殊符号(:,/,...)
进行
编码
8、decodeURIComponent()
9、eval()
作用:计算并执行以字符串方式表示的JS代码
var msg = "console.log('Hello World');";
eval(msg);//将 msg 作为 JS代码去执行
1、创建页面,通过弹框,
输入
一段JS代码
2、通过 eval() ,将
输入
的JS代码执行一次
3、递归调用
1、什么是递归
递归指的是在一个函数中,又一次的调用了自己
2、递归的实现
1、边界条件
2、递归前进 - 继续调自己
3、递归返回 - 向上返回
数据
3、解决问题
1、计算某个数字的阶乘
5!=5*4*3*2*1
5! = 5 * 4!
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! = 1
/*计算 n 的阶乘*/
function f(n){
... ...
已知下列数列 (菲波那切数列)
1,1,2,3,5,8,13,21,34,55,... ...
已知 第一个数为1,第二个数为1
从第三个数开始,每个数字等于前两个数之和
问题:通过一个函数,求某个位置上的数字(用递归实现)
1、使用 continue ,打印输出 1-100之间所有偶数的和
2、让用户循环从弹框录入信息,并将信息打印在控制台上,直到用户
输入
exit 为止
输入
数据
:sanfeng.zhang
sanfeng.zhang
输入
数据
:wuji.zhang
wuji.zhang
输入
数据
:exit
3、猜数字游戏
1、随机生成一个 1-100 之间的数字
Math.random() 返回 0-1 之间的小数
var r = parseInt(Math.random()*100)+1;
2、要求用户
输入
一个整数
若比生成的随机数大,则输出 “猜大了”
若比生成的随机数小,则输出 “猜小了”
直到用户 猜对为止
3、如果用户
输入
exit ,也可以退出游戏
用户从弹框中
输入
年,月,日,判断该日是星期几?
1900年1月1日 是星期1
推荐思路:
从1900年1月1日 到
输入
的年月日 共有多少天求出来,与 7 取余
1、通过一个循环计算从1900年 到
输入
年前一年有多少天?
2、再从1月,到
输入
月份的前一个月共有多少天?
3、再
累加
输入
的日
4、用整体结果 与7取余,给出提示
附加作业:
将
输入
的月份的日历打印输出
2017年8月
日 一 二 三 四 五 六
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
4、有一对兔子,从出生后的第3个月起都生一对兔子,小兔子长到第3个月后每个月又生一对兔子,假如兔子都不死的话,打印输出 前10个月,每个月有多少对兔子
n1 n2 n1 n2 n1 n2
1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55
2、三个表达式的特殊用法
1、for(;;)
三个表达式可以任意的省略,不推荐省略
2、for 第一个 和 第三个表达式的多样化
for(var i=1,j=2;i=1;i++,j--){
console.log(i+"+"+j+"="+(i+j));
3、嵌套循环
在一个循环的内部又出现一个循环
for(var i=0;i<10;i++){ // 外层循环
for(var j=0;j<10;j++){ // 内层循环
外层循环执行一次,内层循环要执行一轮
1、控制台中输出下面的图形
******
******
******
******
******
*****
*****
*******
*********
1、什么是数组
数组,即
一组
数据
,使用一个变量来存放多个
数据
数组中的元素是按照"线性"书序来排列的,所以也可以称之为是一个 "线性表"
2、声明数组
1、声明一个空数组变量
var 数组名 = [];
2、声明数组并赋初始值
var 数组名 = [
数据
1,
数据
2,
数据
3,... ...];
3、声明一个空数组变量
var 数组名 = new Array();
4、声明一个数组并赋初始值
var 数组名 = new Array(
数据
1,
数据
2,... ...);
1、创建一个函数,分别用两种不同的方式创建数组(arr1,arr2)
arr1保存 :张三丰,张翠山,张无忌
arr2保存 :金花婆婆,殷素素,赵敏
2、直接将数组打印在控制台上
3、数组是引用类型的对象
引用类型的对象,是将
数据
保存在 "堆" 中的
在"栈"中,会对 "堆" 中
数据
的地址
进行
引用
1、将数组赋值给其它变量时,实际赋的是数组的地址
1、创建一个数组 arr1 ,包含"张无忌","赵敏"
2、将 arr1 赋值给 arr2
3、将 arr2 的第一个元素更改为 "金花婆婆",打印输出 arr1 和 arr2 中的所有元素
2、数组在做参数的时候,传递进去的实际上是地址(按引用传递 即 按地址传递)
1、创建一个数组array,保存"张无忌","赵敏"俩元素
2、创建一个函数change,接收一个数组作为参数,在函数体内,将第一个元素更改为"金花婆婆"
3、调用change函数,并将array数组作为参数,调用完成后,打印array的值,观察结果
4、修改change函数,在函数体内,将传递进来的数组重新new一个Array("孙悟空","猪八戒")
5、重复步骤三,观察结果
3、null
表示的是让引用类型的对象不再指向任何空间.一般用于主动释放对象的空间
//让 array 指向数组的地址
var array = ["wuji.zhang","zhaomin"];
//释放 array空间,不再指向任何地址
array = null;
4、访问数组的元素
赋值,取值,都是使用 下标 来完成的
1、为数组的元素赋值
数组名[下标] = 值;
var array = ["张无忌","赵敏"];
array[1] = "周芷若";
array[2] = "小昭";//增加一个新元素,在第3个位置处
array[5] = "灭绝师太";
2、获取数组中的值
数组名[下标];
3、length属性
作用:获取数组的长度(数组中元素的个数)
1、允许将数组的length属性值设置为0,来完成数组元素的清空操作
2、配合循环 做数组的循环遍历操作
var array = ["张无忌","赵敏"];
第1名 :张无忌
第2名 :赵敏
for(var i=0;i"sanfeng.zhang"];
用字符串做下标,就是关联数组
var array = []; //声明一个空数组
array["西游记"] = "古代神话故事";
array["红楼梦"] = ["贾宝玉","林黛玉","刘姥姥"];
Q : array.length
1、关联数组是不算做数组内容的,不记录到 length 中
2、关联数组只能通过 字符串 做下标取值
3、允许通过 for...in 来循环遍历关联数组的字符串下标(也能遍历出内容的数字下标)
3、冒泡排序
[23,9,78,6,45] -> [6,9,23,45,78]
冒泡排序:车轮战,两两比较,小的靠前
1、轮数 :共比较了 length - 1 轮
2、每轮中比较的次数 :随着轮数的增加,次数反而减少
双层循环表示整个排序的过程
1、外层循环 :控制比较的轮数,从1开始,到length-1(能取到)结束
2、内层循环 :控制每轮中比较的次数,并且也要表示参与比较的元素的下标,从0开始,到 length-1-i(轮数变量)
[23,9,78,6,45]
共5个元素
外层:从 1 开始,到 4 结束
第一轮 第一次:从 0 开始 ,到 3 结束
第二轮 第一次:从 0 开始 ,到 2 结束
... ...
2、数组的常用方法
1、toString()
将一个数组转换为字符串
语法:var str = 数组对象.toString();
2、join()
作用:将数组中的元素通过指定的分隔符连接到一起,并返回连接后的字符串
语法:var str = 数组对象.join("&");
练习:(10分钟)
1、使用数组实现由 * 组成的三角形
直角三角形,等腰三角形
*****
2、使用数组实现 九九乘法表
3、连接数组
函数:concat()
作用:拼接两个或更多的数组,并返回拼接后的结果
语法:var result=arr1.concat(arr2,arr3,arr4);
1、concat不会改变现有数组,而是返回拼接后的
2、每个参数不一定非是数组,也可以是普通的
数据
1、声明两个全局数组,分别保存一些国家的名称
数组1:选中的国家
sel = ["中国","美国","俄罗斯","日本"];
数组2:备选国家
unsel=["朝鲜","越南","老挝","柬埔寨"];
2、将 备选国家 全部移入到 入选国家中,打印
数据
sel = ["中国","美国","俄罗斯","日本","朝鲜","越南","老挝","柬埔寨"];
unsel=[];
4、获取子数组
函数:slice()
作用:从指定数组中,截取几个连续的元素组成的新数组
语法:arr.slice(start,[end]);
start:从哪个下标处开始截取,取值为正,从前向后取,取值为负,从后向前算位置。
0 1 2 3
var arr=["中国","美国","日本","英国"];
-4 -3 -2 -1
end : 指定结束处的下标(不包含),该参数可以省略,如果省略的话,就是从start一直截取到结束
1、该函数不会影响现有数组,会返回全新的数组
var arr=["中国","美国","日本","英国"];
取出 美国 和 日本 组成的一个子数组
5、修改数组
函数:splice()
作用:允许从指定数组中,删除一部分元素,同时再添加另一部分元素
arr.splice(start,count,e1,e2,... ...);
start:指定添加或删除元素的起始位置/下标
count:要删除的元素个数,取值为0表示不删除
e1,e2,... ... : 要增加的新元素,允许多个
返回值:返回一个由删除元素所组成的数组
注意:splice 会改变现有数组
在 sel 和 unsel 的基础上完成下列操作
1、从备选国家中(unsel),选择一个国家移入到 选中的国家(sel)
推荐步骤:
1、用户
输入
:越南
从 unsel 中将越南移除
再将 越南 sel 的末尾处
2、用户
输入
:墨西哥
提示:国家不存在
6、数组的反转
作用:颠倒数组中元素的顺序
语法:arr.reverse();
注意:该函数会改变当前数组的内容
1、声明一个整数数组
2、倒序打印输出内容(使用reverse())
7、数组排序
函数:sort();
语法:arr.sort(排序函数);
作用:默认情况下,按照元素的Unicode码大小按升序排列
特殊:允许自己指定排序函数,从而实现对数字的升序和降序的排列
语法:arr.sort(排序函数);
var arr = [12,6,4,72,115,89];
//排序函数(升序)
function sortAsc(a,b){
return a-b;
arr.sort(sortAsc);
1、指定排序函数 如 sortAsc,定义 两个参数,如 a 和 b。数组会自动传递
数据
到 sortAsc 里面去,如果返回值是>0的数,则交换两个数的位置,否则不变
使用匿名函数完成排序:
arr.sort(function(a,b){return a-b;});
1、声明一个整数数组,随意定义数字
2、页面上添加两个按钮,一个"升序"按钮,一个"降序"按钮
3、点击 升序 按钮时,数组按升序排序,并打印
4、点击 降序 按钮时,数组按降序排序,并打印
8、进出栈操作
JS是按照标准的"栈式操作"访问数组的
所有的"栈式操作"的特点都是"后进先出"
"栈式操作"讲究的"入栈"和"出栈"
1、push()
入栈,在栈顶(数组的尾部)添加指定的元素,并返回新数组的长度
var arr = [10,20,30];
//向栈顶增加新
数据
40
var len = arr.push(40);
//len 保存的是 40 入栈后 arr 的长度,值是4
2、pop()
出栈,删除并返回栈顶的(数组尾部)元素
var arr = [10,20,30];
var r1 = arr.pop();//arr = [10,20]
var r2 = arr.pop();//arr = [10]
==============================
arr :
r1 : 30
r2 : 20
3、shift()
删除数组头部的(第一个)元素并返回
var arr = [10,20,30];
var r1 = arr.shift();
============================
arr : [20,30]
r1 : 10
4、unshift()
作用:在数组的头部(第一个)元素位置处,增加新元素
var arr = [10,20,30];
arr.unshift(40);
arr : [40,10,20,30]
3、二维数组
1、什么是二维数组
一个数组中的元素又是一个数组,也可以称之为:数组的数组
2、创建二维数组
var names=[
["孙悟空","猪八戒","沙悟净"],
["潘金莲","西门庆","武大郎"],
["贾宝玉","刘姥姥","林黛玉"],
["貂蝉","貂蝉","貂蝉"]
//获取猪八戒
console.log(names[0][1]);
//获取林黛玉
console.log(names[2][2]);
1、通过 进出栈 操作,完成 十进制对二进制的转换
1、创建一个函数 decode2bin,接收一个十进制的数字做参数
2、函数体中,将参数 拆成二进制数字,保存在一个数组中
3、将数组的元素使用""连接,并返回
十进制 转 二进制 :除2取余法
num : 5
num % 2 : 结果为 1
num = parseInt(num / 2) : 结果 2
num % 2 : 结果为 0
num = parseInt(num / 2) : 结果 1
num % 2 : 结果为 1
num = parseInt(num / 2) : 结果 0
结果为 0 时则不用再继续 %2
2、根据省份信息,查询城市列表
1、创建一个全局数组,保存几个省份名称
2、创建一个全局二维数组,保存不同省份中的城市信息(
数据
要与省份数组中的
数据
对应的上)
3、创建一个函数,接收一个省份名称做参数,打印该省份中对应的所有的城市信息
java经典算法题例。参赛必做。
【程序14】
题目:两个乒乓球队
进行
比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请
编程
序找出三队赛手的名单。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
【程序15】
题目:打印出如下图案(菱形)
******
********
******
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。
【程序16】
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
1.程序分析:请抓住分子与分母的变化规律。
【程序17】
题目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把
累加
变成了累乘。
【程序18】
题目:利用递归方法求5!。
1.程序分析:递归公式:fn=fn_1*4!
【程序19】
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
【程序20】
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
【程序21】
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
【程序22】
题目:请
输入
星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
1.程序分析:用情况
语句
比较好,如果第一个字母一样,则判断用情况
语句
或if
语句
判断第二个字母。
【程序23】
题目:求100之内的素数
【程序24】
题目:对10个数
进行
排序
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个
进行
比较,并
进行
交换。
【程序25】
题目:求一个3*3矩阵对角线元素之和
1.程序分析:利用双重for循环控制
输入
二维数组,再将a[i][i]
累加
后输出。
【程序26】
题目:有一个已经排好序的数组。现
输入
一个数,要求按原来的规律将它插入数组中。
1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
【程序27】
题目:将一个数组逆序输出。
1.程序分析:用第一个与最后一个交换。
【程序28】
题目:取一个整数a从右端开始的4~7位。
程序分析:可以这样考虑:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用~(~0 < <4)
(3)将上面二者
进行
&
运算
。
【程序29】:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
【程序30】写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1
3.循环结构的类型:
1)当型循环结构:for
语句
(适合循环次数已知,计数控制的循环)
2)直到型循环结构:while
语句
、do-while
语句
(适合循环次数未知,条件控制的循环)
4.while
语句
1)一般形式为:
while(
public static void main(String[] args){
int n,i=1,sum=0;
Scanner buf=new Scanner(System.in);
System.out.print("
输入
正整数:");
n=buf.nextInt();
}while(n<=0);
while(i<=n)
用do while
语句
编程
,
输入
一组
整型
数据
,然后
显示
每次
将
输入
数据
进行
累加
运算
后的结果。当
输入
0时,停止
输入
数据
,结束程序的运行。 **
输入
格式要求:"%d" 提示信息:"input num:" **输出格式要求:"sum = %d\n"