switch 语句格式: switch ( 表达式 ) { case 值 1 : 语句体 1 ; break ; case 值 2 : 语句体 2 ; break ; … default : 语句体 n + 1 ; break ; }
执行流程:
执行流程
switch接收结果,
代码实现:键盘录入一个值,判断星期
1,星期一
2,星期二
3,星期三,
4,星期四
5,星期五
6,星期六
7,星期日
import java.util.Scanner;
public class SwitchDemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("输入一个数据:");
int week=sc.nextInt();
switch (week){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("非法数据");
break;
}
}
}
public static void main ( String [] args ) { int i = 1 ; switch ( i ){ case 0 : System . out . println ( "语句体1 " ); break ; case 1 : System . out . println ( "语句体2 " ); case 2 : System . out . println ( "语句体3 " ); default : System . out . println ( "语句体4 " ); } }
循环概述:
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false ,从而结束循环,否则循环将一直执行下去,形 成死循环。
for循环:
格式:
for(初始化语句;条件表达式;控制体语句){
循环体语句;
}
使用最多 (求和思想,统计思想)
代码实现:for循环求水仙花数
public class ShuiXianHua {
public static void main(String[] args) {
int count=0;
System.out.println("水仙花数是:");
for (int x=100;x<1000;x++){
int ge=x%10;
int shi=x/10%10;
int bai=x/10/10%10;
if (x==ge*ge*ge+shi*shi*shi+bai*bai*bai){
count++;
System.out.println(x);
}
}
System.out.println("共有"+count+"个");
}
}
while语句格式:
public class WhileDemo {
public static void main(String[] args) {
int i=1;
int sum=0;
while(i<=100){
sum=sum+i;
i++;
}
System.out.println("1~100之间的和为"+sum);
}
}
利用while循环求水仙花数:
public class WhileDemo3 {
public static void main(String[] args) {
int x = 100;
int count=0;
while(x>=100&&x<1000){
int ge=x%10;
int shi=x/10%10;
int bai=x/10/10%10;
if(x==ge*ge*ge+shi*shi*shi+bai*bai*bai){
System.out.println("水仙花数是:"+x);
count ++;
}
x++;
}
System.out.println("水仙花数共有"+count+"个");
}
}
for 循环语句和 while 循环语句可以等价转换,但还是有些小区别的使用区别: 控制条件语句所控制的那个变量,在 for 循环结束后,就不能再被访问到了,而 while 循环结束还可以继续使用,如 果你想继续使用,就用while ,否则推荐使用 for 。原因是 for 循环结束,该变量就从内存中消失,能够提高内存的使 用效率。 场景区别: for 循环适合针对一个范围判断进行操作 while 循环适合判断次数不明确操作
初始化语句 ; do { 循环体语句 ; 控制条件语句 ; } while (( 判断条件语句 );
public static void main(String[] args) {
int x=1;
do {
System.out.println("HelloWorld");
x++;
}while(x<=10);
}
do...while 循环的特点:无条件执行一次循环体,即使我们将循环条件直接写成 false ,也依然会循环一次。这样的 循环具有一定的风险性
break : 中断,结束(循环或者switch中用)
continue: 结束当前循环,立即进入下一次循环.
return: 结束方法用的.
import java.util.Scanner;
public class DieLopperDemo {
public static void main(String[] args) {
System.out.println("进行猜数字游戏.数值值在1~100之间");
//产生一个1~100之间的随机数 random()产生的随机数在0.0~1.0之间 [0.0,1.0)
int num= (int) (Math.random()*100+1);
int count=0;
while(true){
count++;//记录猜数字的次数
//if 判断 限定猜题次数
if(count<=5){
System.out.println("输入你的数据:");
//创建键盘录入数据对象
Scanner sc=new Scanner(System.in);
int gussNumber=sc.nextInt();
if (gussNumber>100||gussNumber<0){
System.out.println("您输入的数据不合法,数据在1~100之间");
}else if(gussNumber>num){
System.out.println("您猜的值大了");
}else if(gussNumber<num){
System.out.println("您猜的值小了");
}else{
System.out.println("您在第"+count+"次猜对了");
break;
}
}else{
System.out.println("您的答题次数用完了!");
break;
}
}
}
}
方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。 当我 们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。 (方法就是完成特定功能的代码块)
方法的定义:
修饰符 返回值类型 方法名 (参数列表){ 代码(方法体) ... return ; }
import java.util.Scanner;
public class Demo4 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("输入第一个小数:");
double num1=sc.nextDouble();
System.out.println("输入第二个小数:");
double num2=sc.nextDouble();
double decimal = getDecimal(num1, num2);
System.out.println("最大值是:"+decimal);
}
public static double getDecimal(double a,double b){
double min;
if(a>b){
min=b;
}else {
min=a;
}
return min;
}
}
代码实现:比较两个数据是否相等;
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("输入第一个数据:");
double num1=sc.nextDouble();
System.out.println("输入第二个数据:");
double num2=sc.nextDouble();
boolean equal = getEqual(num1, num2);
System.out.println("两个数据相等吗?"+equal);
}
public static boolean getEqual(double a,double b){
boolean flag=(a==b);
return flag;
}
}
代码实现:nn乘法表
import java.util.Scanner;
public class Demo6 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("输入:");
int n1=sc.nextInt();
getRide(n1);
}
public static void getRide(int a){
for (int n =1;n<=a;n++){
for (int j=1;j<=n;j++){
System.out.print(n+"*"+j+"="+(n*j)+"\t");
}
System.out.println();
}
}
}
方法名相同,与返回值的类型无关,参数列表不同(参数类型不同,参数个数不同,参数顺序不同)
public static void open (){} public static void open ( int a ){} static void open ( int a , int b ){} public static void open ( double a , int b ){} public static void open ( int a , double b ){} public void open ( int i , double d ){}
基本类型作为形式参数,形式参数不影响实际参数; 引用类型作为形式参数,形式参数的改变直接影响实际参数;
栈:存放局部变量(现进后出)
堆:new出来的对象存储在这个区域(.创建的新对象放在堆中)
方法区: .class文件(字节码文件)---方法调用过程需要加载类(里面存储了很多的方法,这些方法被调用,加载进栈内存)
static区域
常量池区域
寄存器:本地方法区,和CPU,系统有关
分析:
1. 定义一个方法
方法的返回值 int
方法的参数类型和参数个数
int[],查询的具体的元素 2个参数
2.
遍历数组,获取所有元素
判断:如果要查询的元素和数组的中元素一致,就找到了
返回角标值
import java.util.Scanner;
public class DemoTest {
public static void main(String[] args) {
int [] arr={12,56,45,96,78};
Scanner sc=new Scanner(System.in);
System.out.println("输入元素:");
int num1=sc.nextInt();
int index = getIndex(arr,num1);
System.out.println("Index:"+index);
System.out.println("输入元素:");
int num2=sc.nextInt();
int index1 = getIndex(arr, num2);
System.out.println("没有该元素"+index1);
System.out.println("输入元素:");
int num3=sc.nextInt();
int index2 = getIndex2(arr, num3);
System.out.println("Index:"+index2);
}
public static int getIndex(int [] arr,int target){
for (int i=0;i<arr.length;i++){
if (target==arr[i]){
return i;
}
}
return -1;
}
public static int getIndex2(int [] arr,int target){
System.out.println("-------------------------");
int index=-1;
for (int i=0;i<arr.length;i++){
if (target==arr[i]){
index=i;
}
}
return index;
}
}
分析:
角标x = 0 ,
将arr[0]元素和arr[arr.length-1-0] 互换
arr[1]元素和arr[arr.length-1-1] 互换
arr[2]元素和arr[arr.length-1-2] 互换
public class DemoTest2 {
public static void main(String[] args) {
int [] arr={15,56,89,78,65};
System.out.println("逆序前:");
extracted1(arr);
System.out.println("逆序后:");
extracted(arr);
}
private static void extracted1(int[] arr) {
System.out.print("[");
for (int i = 0; i< arr.length; i++){
if(i== arr.length-1){
System.out.println(arr[i]+"]");
}else {
System.out.print(arr[i]+", ");
}
}
}
private static void extracted(int[] arr) {
for (int start = 0, end = arr.length-1; start<end; start++,end--){
int temp= arr[start];
arr[start]= arr[end];
arr[end]=temp;
}
extracted1(arr);
}
}
分析:
int[] array = {65,45,76,87,13} ;
1.定义一个参照物 array[0]就是最大值
2.从角标1开始遍历数组的其他元素
3.判断:使用后面的元素依次和参照物比较
如果后面元素比参照物,将最大值修改了
4.获取最大值;
public class DemoTest4 {
public static void main(String[] args) {
int [] arr={12,45,56,78,98};
printArray(arr);
int max = getMax(arr);
System.out.println("最大值是:"+max);
getMin(arr);
}
public static void printArray(int [] arr){
System.out.print("[");
for (int i=0;i<arr.length;i++){
if (i==arr.length-1){
System.out.println(arr[i]+"]");
}else {
System.out.print(arr[i]+", ");
}
}
}
public static int getMax(int [] arr){
int max=arr[0];
for (int i=1;i<arr.length;i++){
if (arr[i]>max){
max =arr[i];
}
}
return max;
}
public static void getMin(int [] arr){
int min=arr[0];
for (int i=1;i<arr.length;i++){
if (arr[i]<min){
min=arr[i];
}
}
System.out.println("最小值是:"+min);
}
}

冒泡排序:
两两比较,将较大的值往后放,第一次比较完毕,最大值出现在最大索引处;
依次这样比较,可以得到排好序的数组;
规律
1.两两比较,将较大的值往后放,
2.第一次有0个不比
第二次有1个不比
....
每次比较,就会减少一次比较
比较的次数:数组长度-1次
public class DemoTest3 {
public static void main(String[] args) {
int [] arr={65,95,46,48,15};
System.out.println("排序前:");
printArray(arr);
bubbleSort(arr);
}
public static void printArray(int [] arr){
System.out.print("[");
for (int i=0;i<arr.length;i++){
if (i==arr.length-1){
System.out.println(arr[i]+"]");
}else {
System.out.print(arr[i]+", ");
}
}
}
public static void bubbleSort(int [] arr){
for (int i=0;i<arr.length-1;i++){
for (int j=0;j<arr.length-1-i;j++){
if (arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println("冒泡排序后:");
printArray(arr);
}
}
能够描述现实世界事物一组属性和行为的集合
类和事物的关系:一一对应;
面向对象是基于面向过程的
类:代码中体现 class Studnet()
事物:现实世界真实存在的东西
代码的健壮性(里面涉及java面向的对象特征以及java设计模式)
成员变量与局部变量:
成员变量:类中方法外
局部变量:方法中
属性:(成员变量)姓名,年龄,性别......
行为:(成员方法)学习,玩,吃......
代码体现:
public class studentTest {
public static void main(String[] args) {
student s=new student();
s.name="蔡同斌";
s.sex="男";
s.age=21;
s.hair="三七分";
System.out.println("姓名:"+s.name+"; 性别:"+s.sex+"; 年龄:"+s.age+"; 发型"+s.hair);
s.eat("兰州牛肉面");
s.smoke("黑兰州");
s.play("英雄联盟");
s.study();
}
}
class student{
String name;
String sex;
int age;
String hair;
public void eat(String toName){
System.out.println(name+"早晨喜欢吃"+toName);
}
public void smoke(String toName){
System.out.println("吃完饭,习惯抽一根"+toName);
}
public void play(String toName){
System.out.println("喜欢玩"+toName);
}
public void study(){
System.out.println("玩结束了,开始学习javaEE");
}
}
封装,继承,多态
private关键字的特点?
代码实现:
public class Student {
private String name;
private int age;
private String sex;
public void setName(String a){
name=a;
}
public void setAge(int b){
age=b;
}
public void setSex(String c){
sex=c;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String getSex(){
return sex;
}
public void show(){
System.out.println("姓名:"+name+"; 年龄:"+age+"; 性别:"+sex);
}
private void study(String toName){
System.out.println("开始学习"+toName);
}
private void play(String toName){
System.out.println("喜欢玩"+toName);
}
public void method(){
study("javaEE");
play("英雄联盟");
}
}
测试类:
public class StudentTest {
public static void main(String[] args) {
Student s=new Student();
s.setName("高圆圆");
s.setAge(42);
s.setSex("女");
s.show();
s.method();
}
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco