【跟我学Java就对了!!!】:输入输出及其练习

对于c语言的输入输出方式其实还是相对比较简单的,但对于java来说,很多人可能会觉得比较复杂,那么下面我为大家来剖析一下java的输入输出是怎样实现的。

1.输出

java有print 、printf 、println这三个输出方式。

print是不换行输出。

printf是格式化输出,和c语言的printf一样。

println是自带换行的输出

System.out.printf("%x\n",~0xff);
System.out.println("ln是换行的意思");
System.out.print("这个不换行");
System.out.print("这个不换行");

这是输出结果:
在这里插入图片描述

2.输入

(1)方法一:

我们先来看一下这样一条语句

int i = System.in.read();

对于这条语句。在idea上面会出现异常,就像这样:
在这里插入图片描述
我们把鼠标悬放在read上,会出现下面这个界面
在这里插入图片描述
然后我们会发现,代码变成如下的模样,很大一坨。

在这里插入图片描述
但是这样就没有异常了,而且还可以根据需求,添加一些提示语句。

public static void main(String[] args) {
    int i =0;
    try {
        System.out.print("请输入一个字符:");
        i = System.in.read();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println(i);
}

在这里插入图片描述
根据我们的输入和输出结果,可见这个功能是输入相应字符,输出对应的十进制码值。

(2)方法二:

示例int:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int a=scanner.nextInt();
    System.out.println(a);
}

在这里插入图片描述
在这里插入图片描述

示例string:
Scanner sc = new Scanner(System.in);
String a=sc.nextLine();
System.out.println(a);

在这里插入图片描述

3.猜数字游戏

我们来结合输入输出来完成一个小游戏:

这个游戏开始之前,我们先来插入一个小知识点——循环输入

记得在c语言中,我们的循环输入典型示例是这样:在这里插入图片描述
那么。我们在java中的循环主体也是差不多的
在这里插入图片描述
以下是代码:

import java.util.Random;
import java.util.Scanner;

public class cjsi {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random rd = new Random();
        int answer = rd.nextInt(100);
        System.out.println("请输入你猜的数字:");
        while(sc.hasNextInt()){
            int guess = sc.nextInt();
            if(guess==answer) {
                System.out.printf("\n恭喜你猜对了,数字是%d", answer);
                break;
            }else if(guess>answer){
                System.out.println("猜大了");
            }else if(guess<answer){
                System.out.println("猜小了");
            }
            System.out.println("请输入你猜的数字:");
        }
    }
}

这样我们的猜数字游戏就完成啦!

4.判断素数

我们再来说一下素数的数学概念,一个大于1的数,除了1和它本身,不能除尽别的数。

判断素数之前,我们要讲一个功能,就是怎么用idea调用java的数学模块的开根号功能。

这就是开根号的功能函数:

在这里插入图片描述
下面我们来进行运用:

public class cjsi {
    public static void main(String[] args) {
        int Divisor = 1;
        for(Divisor=2;Divisor<100;Divisor++){
            int divisor=2;
            for(divisor=2;divisor<Math.sqrt(Divisor);divisor++){
                if(Divisor%divisor==0){
                    System.out.println(Divisor+"不是素数");
                    break;
                }
            }
            if(divisor>=Math.sqrt(Divisor)){
                System.out.println(Divisor+"是素数");
            }
        }
    }
}

这就是整个素数的判断代码。

5.乘法口诀表

这个没什么特殊的,就是操作符的运用还有循环的控制。

这个就是代码部分:

public class cjsi {
    public static void main(String[] args) {
        int mul1 = 1;
        for(mul1=1;mul1<=9;mul1++){
            int mul2 = 1;
            for(mul2=1;mul2<=mul1;mul2++){
                System.out.printf("%d*%d=%d\t",mul1,mul2,mul1*mul2);
            }
            System.out.println();
        }
    }
}

这是运行结果:

在这里插入图片描述
这里用到了制表符

6.求最大公约数(2种方法)

方法一:减法

我们先看一下这个思路图解

先设这两个数,一个是32 ,一个是24在这里插入图片描述
这样我们就得出他们的最大公约数是8了。

整体思路就是拿大的数减去小的数,直到其中一个数变成0,那么另一个数就是最大公约数

那么,我们用代码来实现一下:

public class cjsi {
    public static void main(String[] args) {
        Random rd = new Random();
        int num1= rd.nextInt(100);
        int num2= rd.nextInt(100);

        System.out.printf("%d %d的最大公约数是:",num1,num2);
        while(num1!=0&&num2!=0){
            int temp=num1;
            num1=num1>num2?num1:num2;
            num2=num2<temp?num2:temp;
            num1-=num2;
        }
        if(num1==0){
            System.out.println(num2);
        }else{
            System.out.println(num1);
        }
    }
}

方法二:除法

我们先看一下这个思路图解:(和减法的很像)

先设这两个数,一个是32 ,一个是24
在这里插入图片描述
整体思路就是拿大的数取余小的数,直到其中一个数变成0,那么另一个数就是最大公约数

那么,我们用代码来实现一下:

public class cjsi {
    public static void main(String[] args) {
        Random rd = new Random();
        int num1= rd.nextInt(100);
        int num2= rd.nextInt(100);

        System.out.printf("%d %d的最大公约数是:",num1,num2);
        while(num1!=0&&num2!=0){
            int temp=num1;
            num1=num1>num2?num1:num2;
            num2=num2<temp?num2:temp;
            num1%=num2;
        }
        if(num1==0){
            System.out.println(num2);
        }else{
            System.out.println(num1);
        }
    }
}

7.计算1/1-1/2+1/3-1/4+……1/n的和

下面的分母就是很简单的等差数列,我们只需要稍微再控制一下交替的符号就可以了。

我们把这个代码写一下:

public class cjsi {
    public static void main(String[] args) {
        int i = 0;
        double sum=0.0;
        for(i=1;i<=100;i++){
            int symbol = 1;
            if(i%2==0){
                symbol=-1;
            }
            sum+=symbol*(1.0/i);
        }
        System.out.println(sum);
    }
}

结果是这个:

在这里插入图片描述

8.求一个数字x中出现多少次数字n

这个x和n可以自定义。

那我就来假定一下,我们来求0~100内,有多少个数字6。

这个比较简单,就是考察怎么把数字位一个一个拿下来。

public class cjsi {
    public static void main(String[] args) {
        int i = 1;
        int count =0;
        for(i = 1;i<100;i++){
            if(i%10==6){
                count++;
            }
            if(i/10==6){
                count++;
            }
        }
        System.out.println(count);
    }
}

这个是结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OA0wDflg-1626262492230)(C:\Users\zzy\AppData\Roaming\Typora\typora-user-images\image-20210714091219905.png)]

9.水仙花数字

就是一个三位的数等于它每个位数的三次方之和

比如153=1^3 + 5^3 + 3^3,这个就是一个水仙花数字

那么我们再来写一下代码

public class cjsi {
    public static void main(String[] args) {
        for(int i = 100;i<1000;i++){
            if((Math.pow(i/100,3)+Math.pow(i%100/10,3)+Math.pow(i%10,3)==i)){
                System.out.println(i);
            }
        }
    }
}

10.模拟密码登录

最多可以输入3次密码。

在这之前我们需要插入一些比较字符串的方法

(1)compareTo

样例:
在这里插入图片描述
这个是用来比较字符串的大小的

如果相等,返回0

如果前面的小于后面的,返回小于0 的值

如果前面的大于后面的,返回大于0的值

(2)equals

使用样例
在这里插入图片描述
用来比较两个字符的内容是否相等。

相等返回true,不等返回false

(3)==

这个是比较2个字符串的地址一不一样

使用样例:
在这里插入图片描述
—————————————————————————————————————————————————————

接下来,让我们正式开始写:

import java.util.Scanner;
import java.lang.String;
public class pas {
    public static void main(String[] args) {
        int times = 3;
        String password ="zbossz123zzy";
        do{
            System.out.println("请输入您的密码,还有"+times+"次机会:");
            Scanner sc = new Scanner(System.in);
            String typing = sc.nextLine();
            if(password==typing){
                System.out.println("登入成功");
                break;
            }
            times--;
        }while(times>0);
    }
}

这是运行结果: 在这里插入图片描述

11.一个数字中2进制1的个数

思路:
在这里插入图片描述

public class qgs1 {
    public static void main(String[] args) {
        int num =15;
        int count1 =0;
        while(num!=0){
             num&=(num-1);
             count1++;
        }
        System.out.println(count1);
    }
}

第二个思路就是

public class fda2 {
    public static void main(String[] args) {
        int num =15;
        int count1 =0;
        while(num!=0){
            if((num&1)==1){
                count1++;
            }
            num>>>=1;
        }
        System.out.println(count1);
    }
}

在这里插入图片描述

12.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列

具体思路也与上述很像。

public class ceac {
    public static void main(String[] args) {
        int num =11;
        for(int i = 31;i>0;i-=2){
            System.out.print(((num>>>i)&1)+" ");
        }
        System.out.println();
        System.out.print(" ");
        for(int i = 30;i>=0;i-=2){
            System.out.print(((num>>>i)&1)+" ");
        }
    }
}

13.打印一个“x”

就是控制循环罢了
在这里插入图片描述
以上是行为分析。

接下来我们用代码实现。

public class x {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt()){
            int scanf = sc.nextInt();
            for(int row=0;row<scanf;row++){
                for(int col=0;col<=scanf;col++){
                    if(row==col||row+col==scanf-1){
                        System.out.print("*");
                    }else{
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }
        }
    }
}

这是结果图样:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值