用java代码将1到1000的奇数打出来
这是一个java基础题
虽然基础,但是我们练习的时候,可以加以拓展和优化,熟悉for循环 while循环, 了解运算符优先级, 加强对业务逻辑的分析处理,强化写代码的能力。
首先代码的写法是多样的
1.根据奇数定义 : 不能被2所整除的数是奇数
根据这个定义,我们可以写一个最基础的版本
public class Odd1 {
public static void main(String[] args) {
for (int i = 1; i < 1000; i++) {//1~1000之间 循环1000次
if(i%2!=0){ //不能被2整除的
System.out.println(i);//就是奇数,打印出来
}
}
}
}
分析下,这个版本,我们发现这个版本性能可能比较低
因为要循环1000次,并且每次还要进行一次求余运算。所以性能低。
有没有改进的空间?
2. 我们继续对奇数进行了解(对业务进行熟悉)。还有改进的空间
然后发现: 偶数可用2k表示,奇数可用2k+1表示,这里k是整数。
代码修改如下
public class Odd2 {
public static void main(String[] args) {
for (int k = 0; k < 500; k++) {//循环减少为500次
System.out.println(k*2+1);//按照奇数公式进行输出
}
}
}
3. 继续优化. java中乘法是性能消耗比较大的运算, 如果可以使用移位操作 , 那么使用移位操作代替乘法
因为使用移位的操作将会更快和更有效
public class Odd3 {
public static void main(String[] args) {
for (int k = 0; k < 500; k++) {
System.out.println((k<<1)+1);//移位操的优先级低于四则运算, 所以用括号括起来优先计算 , 左移1位.相当于*2
}
}
}
4. 查看奇数的特性 , 来探索其他写法
奇数1、3、5、7、9、11、13、15、17、19、21、23、25、27、29、31、33.........
每个奇数的间隔是2, 第一个奇数是1
代码如下
public class Odd4 {
public static void main(String[] args) {
for (int i = 1; i < 1000; i+=2) {//从1开始,每次自加2
System.out.println(i);
}
}
}
5. 除开for循环, while循环也可以写.
public class Odd5 {
public static void main(String[] args) {
int i = 1;
while (true) {
if (i >= 1000) {
break;//跳出循环
}
System.out.println(i);
i = i + 2;
}
}
}
6 再次修改,如果业务逻辑 从1~1000修改成其他数字了, 那么在循环体中修改不是特别合适
所以需要定义成2个变量. 来记录开始的数字和结束的数字. 并且如果输出太多的数字, 不方便查看, 那么需要美化下输出的格式
public class Odd6 {
public static void main(String[] args) {
int start = 1; //开始的数
int end = 1000; //结束的数
int index =0;//用于换行处理的计算
for (int n = start; n < end; n += 2) {
index++;
System.out.print(n+"\t");// \t表示制表符 ,这样数字看起来排列比较整齐
if(index%10==0){//每10个数字,换一行
System.out.println();
}
}
}
}
{
public static void main(String[] args)
{
for(int n=1;n<=1000;n++){
if(n%2!=0)
{
System.out.println(n);
}
}
}
}
package com.baidu;
public class Test {
public static void main(String[] args) {
for(int i=1;i<1000;i++){
System.out.println(i);
i++;
}
}
}
不懂了再问我