对于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);
}
}
这个是结果
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();
}
}
}
}
这是结果图样: