精华内容
下载资源
问答
  • 题目介绍 北京某高校可用的电话号码有以下几类: 校内电话号码由4位数字组成,第1位数字不是0;...外地号码=数字零+数字+8位数字 非零数字=[1|2||4|5|6|7|8|9] 数字

    题目介绍

    北京某高校可用的电话号码有以下几类:

    1. 校内电话号码由4位数字组成,第1位数字不是0;
    2. 校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,
    3. 若是本市电话则再接着拨8位数字(第1位不是0),
    4. 若是外地电话则拨3位区码再拨8位电话号码(第1位不是0)。

    电话号码=[校内电话号码|校外电话号码]

    校内电话号码=非零数字+3位数字

    校外电话号码=[本市电话|外地电话]

    本市号码=数字零+8位数字

    外地号码=数字零+3位数字+8位数字

    非零数字=[1|2|3|4|5|6|7|8|9]

    数字零=0

    3位数字=3{数字}3

    8位数字=非零数字+7位数字

    7位数字=7{数字}7

    数字=[0|1|2|3|4|5|6|7|8|9]

    各符号含义如下

    在这里插入图片描述

    引用软件工程导论第七版

    展开全文
  • 罗马数字与阿拉伯数字的相互转换

    万次阅读 2018-05-02 09:27:22
      最近遇到一道非常有趣的题目,题目大意如下:有一个富翁在银河系里做生意,而银河系使用的是罗马数字,所以他需要一个精明能干的助手,帮助他完成罗马数字与阿拉伯数字的相互转换,题目在这个背景下衍生出交易...

      最近遇到一道非常有趣的题目,题目大意如下:有一个富翁在银河系里做生意,而银河系使用的是罗马数字,所以他需要一个精明能干的助手,帮助他完成罗马数字与阿拉伯数字的相互转换,题目在这个背景下衍生出交易场景,我们需要帮助他计算出相关商品的价格。对于这道题目,如果剥离开这个题目本身的交易场景,这道题目本质上就是一个纯粹的算法问题。说来惭愧,博主当时并未能快速地解决这个问题,事后通过研读别人的文章始能有所领悟。所以,今天想在这篇文章里,同大家一起来讨论下这个问题。今天,全世界都在使用0到9这10个阿拉伯数字,比阿拉伯数字早2000年的罗马数字。为什么没有流传下来为后世所用呢?我觉得这是一个非常有意思的问题,数学同计算机学科间那种千丝万缕的联系、技术演进过程中若有若无的某种必然性……这些都是令我觉得非常有意思的地方。那么,一起来看看这个问题可好?

    罗马数字起源

      罗马数字,顾名思义,就是古罗马人使用的数字系统。在罗马数字中,共有7个基本数字,即I、V、X、L、C、D、M,它们分别表示1、5、10、50、100、500、1000。可以注意到,在这套数字系统中,0不被视作是一个整数。据说,曾经有一位罗马学者不顾教皇的反对,执意将与0相关的知识以及0在运算中的作用向民众传播,因此被教皇囚禁并投入监狱,理由是0是一个邪物,破坏了神圣的数。同样罗马数字无法表示小数(注:罗马数字有分数的表示方法,可仅仅能表示1/12的整数倍),因此罗马数字常常用来表示纪年,在欧洲国家的古书籍、建筑和钟表中,我们都可以见到罗马数字的身影。我们熟悉的元素周期表,同样采用了罗马数字来表示元素所在的”族”。需要说明的是,罗马数字是一种计数规则,而非计算规则,这意味者罗马数字是没有进位和权重的概念的,所以一般罗马数字只用以计数而不用以演算。

      既然罗马数字是一种计数规则,那么我们就不得不说一说它的组合规则,因为4000以内的数字,都可以用这7个基本数字组合表示。具体来讲,罗马数字的基本规则有以下4条:
    * 重复次数:一个数字重复多少次,所表示的数字就是这个罗马数字的多少倍;一个罗马数字最多重复三次。这条规则该怎么理解呢?第一点,I、II、III分别表示1、2、3;第二点,4必须被表示为IV,而不是IIII。关于4的表示方法,在历史上一直存在争议,一种观点认为IIII这种写法占用书写空间,IV可以达到简化书写的作用;而一种观点则认为IV有亵渎神灵朱庇特、含不敬侮辱之意。
    * 左减原则:当一个较小的数字被放在一个较大数字的左边时,所表示的数字等于这个大数减去这个小数,且左边最多只能放一个较小的数字。联系第一条原则,IV表示的实际上是V-I,所以这个数值表示4;同理,9为了满足第一条原则,必须被表示成IX。
    * 右加原则:当一个较小的数字被放在一个较大数字的右边时,所表示的数字等于这个大数加上这个小数,且右边最多只能放一个较小的数字。这一条原则和第二条原则相对应,例如11会被表示成XI、21会被表示为XXI,以此类推。
    * 搭配原则:I只能被放在V和X的左边;X只能被放在L和C的左边;C只能被放在D和M的左边;V、L、D不能被放在左边。这一条可以看作对是第二条的总结,所以没有什么可说的。

      好了,通过这个这些规则我们就可以组合出不同的数字,我们可以注意到这些数字呈现出1、4、5、9的规律。什么是1、4、5、9的规律呢?我们可以注意到4和9是两个特殊的数字,4必须通过5左减来得到,9必须通过10左减来得到,这是因为罗马数字要满足最多重复三次的原则,而4和9相对1和5的偏移量恰好是4,所以它们的表示方法和其他数字不同。因为罗马数字没有进位和权重的概念,所以除了左减和右增这两种特殊情况以外,它的基本数字应该从左至右依次递减,即使在左减的情况下,左边的数字应该和右边的数字处在同一序列。这句话怎么理解呢?例如,90必须用100-10来表示;而99必须拆解为90和9,然后分别用100-10和10-1来表示,唯独不能通过100-1来表示,因为100和1分属两个不同的序列。

    数字转换实现

      了解完罗马数字的历史渊源,我们就对罗马数字有了一定的了解。现在来考虑一个问题,即罗马数字和阿拉伯数字间的相互转换。罗马数字的确是古罗马人发明的,可阿拉伯数字实际上却是古印度人发明的。今天全世界人都在使用阿拉伯数字,因此这两者间需要一个转换器,这正是我们一开始所讨论的问题:假如银河系里的人们都使用罗马数字来计数,当一个地球上的富翁来到银河系以后,他要如何去和这里的人们进行交易。显然,这种转换应该是双向的,我们下面分别来看如何实现相应的转换。

    阿拉伯转罗马

      首先来考虑阿拉伯数字转罗马数字,因为一个罗马数字必然是从左到右依次递减,所以我们只需要将这7个基本数字从大到小排列,找到第一个不小于指定数字的数位即可。例如1024显然超过了1000,而罗马数字中的1000对应M,因此1024的第一位应该是M。接下来24,显然超过10,因此1024的第二位数字应该是X。接下来14,显然超过10,因此1024的第三位数字同样是X。接下来4,这是一个特殊的数字,需要被表示为IV,这是1024的第四位数字。我们将整个过程串联起来,就可以得到1024的罗马数字形式MXXIV。我们注意的一点是,这里需要4和9这两个数字作为辅助数字,因为1到3、6到8的数字,我们总可以通过不断地重复1来得到,就像辗转相除法一样。如果没有这两个辅助数字会怎样呢?4会变成IIII,而9会变成VIIII,显然这是不符合我们预期的。整理下我们的思路,这段代码实现如下:

    public static string ConvertToRoman(int number)
    {
        var output = new StringBuilder();
        var digitMap = new Dictionary<int,string>()
        {
          {1,"I"},{4,"IV"},{5,"V"},{9,"IX"},
          {10,"X"},{40,"XL"},{50,"L"},{90,"XC"},
          {100,"C"},{400,"CD"},{500,"D"},{900,"CM"},
          {1000,"M"}
        };
        var digits = digitMap.OrderByDescending(e => e.Key).ToList();
    
        for (int i = 0; i < digits.Count && number > 0; i++)
        {
            if (number < digits[i].Key) continue;
            while (number >= digits[i].Key)
            {
                number -= digits[i].Key;
                output.Append(digits[i].Value);
            }
        }
    
        return output.ToString();
    }

    罗马转阿拉伯

      接下来考虑罗马数字如何转换为阿拉伯数字,我们可以明确的一点是,罗马数字基本上是从左到右依次递减排列的,每一个数字的左侧和右侧出现的数字一定处于当前数字的同一序列。比如,I只能被放在V和X的左边;X只能被放在L和C的左边;C只能被放在D和M的左边。因此,我们从左到右依次遍历整个字符串,将每个字符转化为对应的阿拉伯数字然后累加即可,需要注意的是,当当前元素小于下一元素时,表示当前元素为负数;当当前元素大于下一元素时,表示当前元素为正数。显然,这里最后一位应该是正数,因为它没有下一个元素可以比较。至此,我们梳理出整个思路:从第一位到第n-1位依次循环,判断当前元素的正负然后累加,再加上最后一位元素的值即可。下面是代码实现:

    public static int ConvertToNumber(string romanNumber)
    {
        var number = 0;
        var length = romanNumber.Length;
        var digits = new Dictionary<string,int>()
        {
          {"I",1},{"V",5},{"X",10},{"L",50},{"C",100},{"D",500},{"M",1000}
        };
    
        for (int i = 0; i < length - 1; i++)
        {
            //前面 n-1 位数字通过左右比较决定正负 & 第 n 位数字必然为正
            if ((digits[romanNumber[i].ToString()] >= digits[romanNumber[i + 1].ToString()]) || i + 1 >= length)
            {
                number += digits[romanNumber[i].ToString()];
            }
            else
            {
                number -= digits[romanNumber[i].ToString()];
            }
        }
        return number;
    }

    为什么会溢出

      相信上面这两段代码,大家都已然把玩过了。可我们仔细想想,就会觉得这事儿不靠谱。前段时间网络上一直流传着,我们这些佛系青年正在被同龄人抛弃。这个题目里我们所面对的,可是一个来自地球的的富翁啊!富翁的钱不都是按亿来计数的吗?我们没有一个亿这样的小目标,我们的目标是月入5万啊,这是一个社会上流行的说法。好了,回到这个题目中来,如果我们输入50000这个阿拉伯数字,它会输出什么呢?答案是50个M,这很罗马数字啊,当然更神奇的事情是什么呢?当我们尝试把这由50个M组成的罗马数字转换为阿拉伯数字时,会发现它不能像我们期望地输出50000,而会变成是一个负数。为什么这里是负数呢?答案是溢出啦!

      过去,我们常常听到”溢出“这个词儿,最常见的是数据溢出。为什么会发生数据溢出呢?因为我们定义的数据超过了计算机所使用的数据的表示范围。这一点我们可能无法理解,一个相对粗浅的认识是,现代计算机的内存已经大到非常客观,甚至我们的硬盘都已经使用TB这样的容量单位,为什么还是会发生数据溢出呢?回到罗马数字这个问题,我们发现一个残酷的事实是,古罗马人并没有定义1000以上的数字表示,这或许和古罗马人发明数字的过程有关。古人最早都是使用手指、绳结、竹筹这样的工具来计数,在人们没有接触到相当大的数字以前,人们认为这些数的表示是足够的。同样的,我们的计算机经历了从8位、16位、32位到64位的发展。所以,这个世界上没有任何东西是一成不变的,一个技术方案势必要随着业务演化而扩展。

      我们前面曾提到,这7个基本数字可以表示4000以内的数字,为什么是4000以内呢?因为根据罗马数字最多重复三次的规则,我们应该用5000-1000来表示4000,可问题是这7个基本数字中并没有5000的定义,这和计算机中的数据溢出是非常相似的,因为我们都无法通过现有的构造去描述一个新的东西。这和数学上的那些”扩充“有着极其相似的地方,当我们意识到所有的数不都是整数的时候,我们引入了分数/小数;当我们意识到所有的数不都是有理数的时候,我们引入了无理数; 当我们意识到所有的数不都是实数的时候,我们引入了虚数。在数学上,这叫做数的扩充;在计算机里,这叫做数据溢出。数学作为一本学科,可以通过完善理论来自圆其说;而编程语言里数据结构,是在一开始就定义好的一套规范,它无法更不应该经常去修改,关于如何去解决程序中数据溢出的问题,这已然是一个新的问题了,不过我们可以看看古罗马人是怎么做的。

      聪明的罗马人自然想到了这个问题,他们提出的解决方案是这样的:在一个数字的上面加一条横线,表示这个数增值1000倍。所以,按照这个定义,4000应该由IV变化而来,9000应该由10000变化而来,而10000则可以看作是10的1000倍,即10000应该由X变化而来。我们在最初的规则中为什么没有说这一条呢?因为在数字上面增加一条横线,这更接近一个书写的行为,它增加了我们程序解析的难度,当一个数字的上面出现横线以后,我们就不能再按照原来的方式去转换。所以,考虑这个因素,实际上还是为了简化问题本身,这道题目中同样回避了这个问题。罗马人这个想法的确很好,可以解决眼下我们所面临的问题,可时间久了以后,罗马人发现这套计数规则书写了繁琐复杂,因而这套规则渐渐地就被人们放弃了。在2015年意大利官方宣布,国内街道编码、文件编码等全部废弃原有的罗马数字,改为使用阿拉伯数字。

    选择阿拉伯数字

      历史最终选择了阿拉伯数字,而不是罗马数字,这并不是一个巧合,尽管罗马数字要比阿拉伯数字早2000年。罗马数字的缺陷不仅仅在于其书写的繁杂,一个更重要的原因是,它不能更好地推动数学学科的发展。罗马人发明罗马数字的目的是为了计数,可一旦产生了数,就势必会产生计算。可我们发现罗马数字并不适合计算,因为它对数字的构造并不是正交的。一个最为直观的例子是,数字可能会用一个字母、两个字母或者三个字母来表示,如果两个数字要进行加减法,我们会发现它的数字是无法”对齐“的,你必须非常小心地分清楚不同的数位,而罗马数字恰好是没有数位的概念的。同样,当数字加减时会产生进位或者借位,罗马数字的构造会导致牵一发而动全身,因为任何一个中间步骤,我们都必须将其记录下来,记录的代价是将整个结果重写。反观阿拉伯数字,0到9共10个数字可以表示一切,形式上的统一让计算更加便捷,书写更为简洁,这套定义可以扩展到无限大的数上面去,可以扩展到小数、分数甚至无理数、虚数。这是否意味着,一个统一化的定义或者构造,更适合去做相关的运算流程或者逻辑流程呢?

    本文小结

      本文从一道有趣的题目作为引子,引出这篇文章的主题:罗马数字。我们首先为大家回顾了罗马数字的历史渊源。罗马数字是一种由古罗马人创造的数字系统,这套数字系统主要的用途是进行计数。罗马数字由I、V、X、L、C、D、M共7个基本数字组成,其基本规则是最多重复三次、左减右增。接下来,我们分析了罗马数字与阿拉伯数字相互转换的规律,并提供相关代码实现。在当前方案的基础上,我们引出了罗马数字中的”4000“问题,联系计算机中的数据溢出的相关概念,我们分析了为什么当罗马数字超过4000时会发生”溢出“,以及罗马人是如何解决这个问题的。虽然罗马数字比阿拉伯数字早2000年,可历史最终选择了阿拉伯数字,这里我们简要地分析了原因,因为罗马数字并不适合计算,而数字作为数学的基本要素,一个不能被运用到计算出的数字系统,最终免除不了被人们抛弃的命运。好了,这篇五一节前的文章 就是这样啦,4月再见!

    展开全文
  • C#判断字符串是否为数字字符串

    千次阅读 2018-12-27 09:59:45
    我们可以在try语句块中试图将string类型的字符串变量转换int类型,如果该字符串不是数字字符串会抛出异常,这时在catch语句块中就能捕获异常。一旦发现异常,不是数字字符串。 我们可以以下三种方式将s...

    C#判断字符串是否为数字字符串
    在进行C#编程时候,有的时候我们需要判断一个字符串是否是数字字符串,我们可以通过以下两种方法来实现。
    【方法一】:使用 try{} catch{} 语句。
    我们可以在try语句块中试图将string类型的字符串变量转换为int类型,如果该字符串不是数字字符串则会抛出异常,这时在catch语句块中就能捕获异常。一旦发现异常,则不是数字字符串。
    我们可以以下三种方式将string类型转换为int类型。
    (1) int.Parse(string);
    (2) Convert.ToInt16(string); //当数字字符串的位数大于4的时候请使用Convert.ToInt32()
    (3) Convert.ToInt32(string);
    添加一个文本框TextBox1,和一个按钮Button1,当点击按钮时,判断文本框中的内容是否为数字字符串,是的话则输出转换后的数值。
    protected void Button1_Click(object sender, EventArgs e)
    {
    string message = TextBox1.Text.Trim();
    int result;
    if(isNumberic(message,out result))
    {
    string tt=“”);
    }
    protected bool isNumberic(string message,out int result)
    {
    //判断是否为整数字符串
    //是的话则将其转换为数字并将其设为out类型的输出值、返回true, 否则为false
    result = -1; //result 定义为out 用来输出值
    try
    {
    //当数字字符串的为是少于4时,以下三种都可以转换,任选一种
    //如果位数超过4的话,请选用Convert.ToInt32() 和int.Parse()

          //result = int.Parse(message);
          //result = Convert.ToInt16(message);
            result = Convert.ToInt32(message);    
            return true;
        }
        catch
        {
            return false;
        }
    

    }
    上述方法可以将int改为double,如 double.Parse(),这样就可以判断是否为浮点数字符串
    【方法二】:通过正则表达式来判断。
    用正则表达式来验证字符串是否为数字字符串。我们要用到Regex类的isMatch()方法。该类在System.Text.RegularExpressions; 您可以通过using System.Text.RegularExpressions;导入命名空间来访问Regex类。也可以直接通过System.Text.RegularExpressions.Regex 来访问。
    protected bool isNumberic(string message,out int result)
    {
    System.Text.RegularExpressions.Regex rex=
    new System.Text.RegularExpressions.Regex(@"^\d+KaTeX parse error: Expected 'EOF', got '}' at position 185: … return false; }̲ 通过正则表达式判断是否匹配,…"))
    {
    //成功
    Page.ClientScript.RegisterStartupScript(this.GetType(), “”, “”);
    }
    补充
    //正则匹配
    匹配中文字符的正则表达式: [\u4e00-\u9fa5]
    匹配双字节字符(包括汉字在内):[^\x00-\xff]
    匹配空行的正则表达式:\n[\s| ]\r
    匹配HTML标记的正则表达式:/<(.
    )>.</\1>|<(.) />/
    匹配首尾空格的正则表达式:(^\s*)|(\s*$)(像vbscript那样的trim函数)
    匹配Email地址的正则表达式:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
    匹配网址URL的正则表达式:http://([\w-]+.)+[\w-]+(/[\w- ./?%&=]*)?
    以下是例子:
    利用正则表达式限制网页表单里的文本框输入内容:
    用正则表达式限制只能输入中文:οnkeyup=“value=value.replace(/[^\u4E00-\u9FA5]/g,’’)”
    onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\u4E00-\u9FA5]/g,’’))”
    1.用正则表达式限制只能输入全角字符: οnkeyup=“value=value.replace(/[^\uFF00-\uFFFF]/g,’’)”
    onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\uFF00-\uFFFF]/g,’’))”
    2.用正则表达式限制只能输入数字:οnkeyup="value=value.replace(/[^\d]/g,’’)
    "onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,’’))”
    3.用正则表达式限制只能输入数字和英文:οnkeyup="value=value.replace(/[\W]/g,’’)
    "onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,’’))”

    展开全文
  •  (1)定义数字字符串数组{"010","3223","666","7890987","123123"}  (2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个...

    原题目:

    分析以下需求,并用代码实现:
     (1)定义数字字符串数组{"010","3223","666","7890987","123123"}
     (2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出
     (3)如:010 是对称的,3223 是对称的,123123 不是对称的
     (4)最终打印该数组中对称字符串的个数
     
     提示:循环获取字符串的每一个字符,依次比较第一个和最后一个,第二个和倒数第二个。。。

    老规矩,先贴上 参考的其他人的

    一 、 [黑马show] 今天学的好懵逼啊  http://bbs.itheima.com/thread-330591-1-1.html

    public class Test01 {
    
            public static void main(String[] args) {
                    // 定义数字字符串数组
                    String[] str = { "010", "3223", "666", "7890987", "123123" };
                    // 对数组进行遍历
                    for (int i = 0; i < str.length; i++) {
                            //用s对接收上一个字符串
                            String s = str[i];
                            //判断是否对称
                            if (isSymmetric(s)) {        //抽取一个方法
                                    //如果对称打印
                                    System.out.println(s);
                            }
                    }
            }
            /*
             * 参数列表是字符串
             * 返回值类型是布尔
             */
            public static boolean isSymmetric(String s) {
                    String s2 = "";//定义一个字符串
                    //对字符串倒序遍历
                    for (int i = s.length()-1; i >= 0; i--) {
                            s2+=s.charAt(i);//对字符串进行索引,并赋值给s2
                    }
                    return s2.equals(s);        //返回一个布尔值,比较s2与s的值是否相等
            }
    
    }


    二、[学习交流]判断字符串数组里面的字符是否对称解题思路  http://bbs.itheima.com/forum.php?mod=viewthread&tid=288046

    public class Demo_01 {
            public static void main(String[] args) {
                    String[] s = {"010","3223","666","7890987","123123"}; 
                    String s1 = "";
                    
                    for(int i=0;i<5;i++) {                      //第一层for循环把字符串数组转换成字符串
                             s1 = s[i];
                             char[] c2 =new char[s1.length()];
                            //System.out.println(s1);
                             for(int j=0;j<s1.length();j++) {      // 这层for循环把字符串转换成字符数组
                                    char c = s1.charAt(j);
                                    c2[j] = c;
                                    //System.out.print(c + " ");
                            }
                            for(int k=0;k<c2.length/2;k++) {      // c2.length/2是判断的次数,
                                    if(c2[k] == c2[c2.length-1-k]) {
                                            if(k==c2.length/2-1) {
                                                    print(c2);
                                                    System.out.println("是对称的");
                                            }
                                    }else {
                                            print(c2);
                                            System.out.println("不是对称的");
                                            break;
                                    }
                            }
                    }
            }
            public static void print(char[] arr) {            //遍历字符数组
                    for(int i=0;i<arr.length;i++) {
                            System.out.print(arr[i]);
                    }
            }
    
    }
    

    三、java字符串的练习 http://blog.csdn.net/qq_35493220/article/details/69524942

    public static void main(String[] args)  
    {         
        <span style="white-space:pre;"> </span>/* 
    <span style="white-space:pre;"> </span> * 2、判断是否对称 "010","3223","666","7890987","123123" 
         */  
        String[] str = {"010","3223","666","7890987","123123"};  
        for(int i = 0; i < str.length; i++)  
        {         
            for(int j=0; j < str[i].length()/2; j++)  
            {  
                if(str[i].charAt(j) == str[i].charAt(str[i].length()-j-1))  
                {  
                    System.out.print("对称:"+str[i]);  
                    System.out.println();  
                    break;  
                }  
                else  
                {  
                    System.out.print("不对称:"+str[i]);  
                    System.out.println();  
                    break;  
                }  
            }  
        }  
    }  


    四、这一些是一些回答,但是我没试,大家有时间可以试一试。



    五、最后呢,是我的解法,附上代码如下:

    package cn.itcast.demo04;
    
    public class Demo03 {
    	public static void main(String[] args) {
    		String[] str = {"010","0987320","0125310","3223","666","7890987","123123" };
    		isSymmetrical(str);
    		
    	}
    	public static void isSymmetrical(String[] str) {
    	/*	
    	 * 创建buffer缓冲区,来存储 String数组中的单个 str[i]
    	 *	然后利用buffer的reverse功能,将str[i] 反转,然后跟原来的字符串比较
    	 *	如果相同,则输出 ”str[i] 是对称的“  如果不同,则输出 “str[i] 是不对称的”
    	*/
    		StringBuffer buffer = new StringBuffer();
    		
    		for (int i = 0; i < str.length; i++) {
    			//先清空buffer缓冲区,以便只装一个字符串数组,比较完,输出完之后,再接受下一个
    			buffer.delete(0, buffer.length());
    			//buffer.append(str[i]).reverse().toString() 这是一个调用链
    			//其意思就是str[i]的反转  如果str[i]跟他的反转相同,那么就是对称的
    			boolean b = str[i].equals(buffer.append(str[i]).reverse().toString());
    			
    			//如果是对称的,b就是true,输出对应语句,相反的,道理是一样的。
    			if(b == true) {
    				System.out.println(str[i]+"  是对称的");
    				continue;
    			}
    			System.out.println(str[i]+"  是不对称的");
    		}
    	}
    }
    

    效果图如下:



    希望对大家能够有所帮助

    追加: 

    我又实验了另外一种方法,感觉还可以,就贴上来给大家共享了

    /*
     * 3.分析以下需求,并用代码实现:
    	(1)定义数字字符串数组{"010","3223","666","7890987","123123"}
    	(2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,
    	         第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出
    	(3)如:010 是对称的,3223 是对称的,123123 不是对称的
    	(4)最终打印该数组中对称字符串的个数
    	
    	提示:循环获取字符串的每一个字符,依次比较第一个和最后一个,第二个和倒数第二个。。。
     */
    
    /*
     *    在网上找了一个方法。大致思想是:
     *      (1) 用双重循环,外层循环遍历 str[] (字符串数组),内层循环遍历str[i],即字符串
     *      (2)字符串的比较时,用第一个跟最后一个比较,第二个跟倒数第二个比较,以此类推
     *      (3)判断,如果上面比较的都相同,那么就输出 str[i] 是对称的
     *      如果不都相同,那么就输出str[i] 是不对称的
     */
    
    package cn.itcast.demo04;
    
    public class Demo04 {
    	public static void main(String[] args) {
    		String[] str = {"010","3223","666","7890987","0123563210","123123" };
    		isSymmetrical(str);
    	}
    	
    	//比较函数isSymmetrical(){}
    	public static void isSymmetrical(String[] str) {
    		//外层循环遍历String[] str
    		for (int i = 0; i < str.length; i++) {
    			//内层循环遍历str[i] 第一个跟最后一个,
    			//第二个跟倒数第二个,所以,不用循环所有,只需要一半就ok了
    			for (int j = 0; j <= str[i].length()/2; j++) {
    
    				
    				/*	
    				 * 这一段注释的代码,本来是想删掉的,但是,说句实在的,废了好多心思,不论对的错的,删了都很可惜,还是留着吧?
    				 * 	if(str[j] == str[str[i].length()-1-j]) {
    					if(j >= str[i].length()/2-1) {
    						System.out.println(str[i]+"  是对称的");
    						break;
    					}
    				}else {
    					System.out.println(str[i]+"  不是对称的");
    					break;
    				}*/
    				
    				if(str[i].charAt(j) == str[i].charAt(str[i].length()-1-j)) {
    					if(j == (str[i].length())/2-1) {
    						System.out.println(str[i]+"  是对称的");
    					}
    					continue;
    				}else {
    					System.out.println(str[i]+"  不是对称的");
    					break;
    				}
    				
    			}
    		}
    	}
    }
    

    效果图奉上:




    展开全文
  • 在java 中定义一个方法,给定两个数字,求出这两个数字之间所有偶数的和
  • public class MyText2 { public static void main(String[] args) { /* * 2.分析以下需求,并用代码实现 1.定义List集合,存入多个字符串 ...* 2.删除集合元素字符串中...* 3.然后利用迭代器遍历集合元素并输出 *
  • 校外电话又分为本市电话和外地电话两类,拔校外电话需先拔0,若是本市电话再接着拔8位数字(第一位不是0),若是外地电话3位区码再拔8位电话号码(第一位不是0)。 答:电话号码=[校内电话号码|校外电话号码]...
  • 原题要求是接受任意三个数字的输入,但是由于调用input函数总出bug,无奈把程序写死,是手动传参,不过好歹也能运行出想要的结果QAQ。 以下用的排序是冒泡排序法 输入: nums = [4,66,3] def sort(nums): for ...
  • 用户标识符定义_C#标识符定义

    千次阅读 2021-05-20 07:56:17
    能把 C语言关键字作为用户标识符,例如if,for,while等. 语言内建标识符:语言内建标识符定义在语言内部。Aa=aBa+bCnameDdefault选正确选项.其次,标识分用户标识符、关键字和预定义标识符 在a,b答案中,“=”和“+...
  • 一次操作定义为对这个序列的每个数字进行以下两种改变之一: 1.ai ÷ 2 2.ai × 3 每一次的操作中,必须保证至少有一个数字是第1种改变;并且经过每次操作后,每一个数字都必须是整数。 牛牛得知,每进行一次...
  • 以下是报错的代码,从宏定义的第一个就出现了报错 #define '10' A #define '11' B #define '12' C 出现如下报错 macro names must be identifiers //中文大意应该“宏名称必须是标识符”。 查资料发现是错误原因是...
  • const float pi=3.1415926f 表示定义一个浮点型的常数,初始化为 3.1415926 凡是常数值,只能在定义的时候赋值,进行初始化,定义过以后就能更改常数的值了。 float单精度浮点型,有效数字为6~7位 ...
  • JAVA 中魔法数字定义

    千次阅读 2013-03-30 10:50:04
    JAVA使用魔法数字   说明:所谓魔法数值,是指在代码中直接出现的数值,只有在这个数值记述的那部分代码中才能明确了解其含义。  魔法数值使代码的可读性大大下降。而且,如果同样的数值多次出现时,到底...
  • 判断一个字符串是否为数字是Java开发中很常见的业务需求,实现这个判断有很多种方式,大体上分为异常处理,正则表达式,数字字符,NumberFormat工具类,外部工具类这四大类,不同类型下的实现方式其实略有不同,那么...
  • 数字图像处理入门(一) 击中击

    万次阅读 2013-11-18 17:54:11
    其基本原理:(集合X原二值化图像的像素集合,对X取反求得~X(非X, Y表示), 选择的结构元s1, 对结构元s1取反的结构元s2) 首先对用s1对X进行腐蚀得到A1,, 用s2对Y(即~X)进行腐蚀得到A2。最终结果C = A1 & A2...
  • 拨校外电话需要先拨0,若是本市电话接着拨8位数字(第一位不是0),若是外地电话3位区码后再拨8位电话号码(第一位不是0)。 答: 电话号码=[校内电话号码|校外电话号码] 校内电话号码=非零数字位...
  • 数字游戏,1到100猜数字游戏规则

    千次阅读 2020-12-21 13:49:37
    计算机实习报告面向过程编程用C语言求解实际问题一、问题描述游戏类第15个任务——猜数字游戏任务描述:...计算机实习报告面向过程编程用C语言求解实际问题一、问题描述游戏类第15个任务——猜...
  • 1. 针对以下问题:某一种 8位计算机,其十六进制常数的定义是以 0x 或 0X 开头的十 六进制整数, 其取值范围-7f ~7f (区分大小写字母) , 如 0x13、 0x6A 、 -0x3c 。 请采用等价类划分的方法设计测试用例。输入条件...
  • openssl与数字证书的使用

    千次阅读 2017-05-20 10:07:36
    Openssl与数字证书的使用详解数字证书这个概念大家应该并陌生,比如我们在利用Nginx提供https服务的时候需要我们去CA申请一 个包含我们的公钥信息、身份信息、数字签名的证书,再比如我们在使用银行的U盾的时候也是...
  • 导读:众多企业管理者都将“数字化转型”视战略核心,那么“数字化转型”应该已经有了一个清晰的概念才对,但实际上却并非如此。经过笔者多方收集,似乎大家对“数字化转型”都有自己的理解。作者:...
  • java项目中常量规范定义的思考

    千次阅读 2018-09-02 23:38:31
    大言不惭,无必之志。——《论语·宪问》 1、引言 最近在看老大在项目中写的代码,发现在系统常量的定义上,与我之前在开发项目的定义有些一样,引发了我对系统变量如何规范定义和每一种定义有什么优点?这...
  • #!/usr/bin/python #-*- coding:UTF-8 -*- #set chinese code #definition four function def COUNT(count_one,count_tuo,operation): if operation == '+': print count_one,'+',count_tuo,'=',(cou
  • 话题:编写函数,计算一个整数各位数字之和回答:这个关键是怎么得到每位数, #includeint sum_num(int num)//得到每位数的函数 { int sum=0; while(num10) //计算每位数的循环,先得到的是各位然后依次类推 { sum+=...
  • c语言常量(c语言常量定义规则)

    千次阅读 2021-05-20 08:57:57
    还有 知知道在C语言中形式参数和实际参数之间的联系是什么.C语言定义常量常用的方法有以下2种:第一种:宏定义#define N 3 // 定义了一个常量为3的宏N,在程序中N就代表3第二种:给变量初始化赋值 int a = 2;...
  • 定义详解

    万次阅读 多人点赞 2017-08-29 15:32:09
    定义的黑魔法 - 宏菜鸟起飞手册 宏定义在C系开发中可以说占有举足轻重的作用。...但是使用宏定义的好处是言自明的,在节省工作量的同时,代码可读性大大增加。如果想成为一个能写出漂亮优雅代码的开发者,宏
  • c# 中文数字转阿拉伯数字

    千次阅读 2018-09-10 23:23:37
    可是能下载到的现成的TXT格式小说全都被打了广告,仔细看的时候像一些“首”、“发”、“小”、“说”等等字符全被删掉了,还有更离谱的是敏感字符全都替换拼音了,我宁愿它显示星号,忍了啊!所以决定自己写个...
  • 什么是数字水印

    千次阅读 2020-08-05 22:47:09
    经常有文章把数字签名和数字水印“傻傻分清”,那今天就介绍一下数字水印。 一、数字水印技术原理 数字水印是一种信息隐藏技术,它利用人体感官的限制,将数字信号,如图像、文字、符号、数字等一切可以作为标记、...
  • 针对MBD技术的深层次应用,论述了数字线和数字孪生定义的概念和应用,指出数字线和数字孪生模型技术实施的重点和核心问题。指明全三维产品研制模式下对产品构型管理的新需求,探讨...
  • 简单普及数字人民币概论、特征、架构介绍

    千次阅读 多人点赞 2021-03-01 10:15:44
    上述定义可以从四个层面理解: (1)从货币定位看,数字人民币由中国人民银行 发行,是一种和纸钞、硬币等价的法定货币,定位于流通中现金(M0),属于基础货 币范畴,其法律地位与现金相同; (2)从发行管理看,...
  • 0 前言 本文使用emu8086软件进行8086汇编语言编辑和运行。 顺便说一句,汇编语言源程序中的数字,默认是十进制,因此使用十六进制的数字的时候,必须有h或H后缀,本文也都遵循这样的原则。...1.1 字符串的定义与使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 592,373
精华内容 236,949
关键字:

以下定义则数字不为3