Java学习新手,在做练习遇到不解之谜!!!

囍新革脸 2016-08-24 09:56:23

package com.zuoye;
/*某个公司采用公用电话传递数据,数据是四位的整数,
* 在传递过程中是加密的,加密规则如下:
* 每位数字都加上5,
* 然后除以10的余数代替该数字,
* 再将第一位和第四位交换,第二位和第三位交换。
*/
import java.util.Scanner;
public class 作业12改版 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("请输入四位数:");
int i = input.nextInt () ;//保存用户输入的四位数
if (i <= 9999) {
int i1 = (int)(i/1000)+5;//四位数的千位数加5
int i2 = (int)((i-i1*1000)/100)+5;//四位数的百位数加5
int i3 = (int)((i-i1*1000-i2*100)/10)+5;//四位数的十位数加5
int i4 = (i-i1*1000-i2*100-i3*10)+5;//四位数的各位数加5
int j1 = i1%10 ; //千位数加5后除以10的余数
int j2 = i2%10 ; //百位数加5后除以10的余数
int j3 = i3%10 ; //十位数加5后除以10的余数
int j4 = i4%10 ; //个位数加5后除以10的余数
System.out.print ("加密后的四位数是:" + j4 + j3 + j2 + j1);
}else{
System.out.println ("您输入的不是四位数");
}
}
}

//********************************************************************
//输出结果:
//
//请输入四位数:1234
//加密后的四位数是:-1-1-26
//
//*********************************************************************
//看到这个结果我就懵逼了,怎么能是这样的呢!!!!是我的错吗,还是就是这样的!!!
...全文
224 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
soton_dolphin 2016-08-25
  • 打赏
  • 举报
回复

public static void main(String[] args) {
         
        Scanner input = new Scanner(System.in);
        System.out.print("请输入四位数:");
        int plainNumber = input.nextInt () ;
        if((plainNumber / 1000) == 0 || (plainNumber / 1000) > 10){
            System.out.println("输入的数字不是4位数。");
            return;
        }
         
        int[] digits = new int[4];
        int index = 0;
        while (plainNumber > 0) {
            digits[index] = (plainNumber % 10 + 5) % 10; 
            plainNumber = plainNumber / 10;
            index ++;
        }
         
        int temp = digits[0];
        digits[0] = digits[3];
        digits[3] = temp;
         
        temp = digits[1];
        digits[1] = digits[2];
        digits[2] = temp;
         
        System.out.println(digits[3] * 1000 + digits[2] * 100 + digits[1] * 10 + digits[0]);
        for(int i = 0; i<digits.length; i++){
            digits[i] = 0;
        }
    }
soton_dolphin 2016-08-25
  • 打赏
  • 举报
回复

public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
        System.out.print("请输入四位数:");
        int plainNumber = input.nextInt () ;
        if((plainNumber / 1000) == 0 || (plainNumber / 1000) > 10){
        	System.out.println("输入的数字不是4位数。");
        }
        
        int[] digits = new int[4];
        int index = 0;
		while (plainNumber > 0) {
		    digits[index] = (plainNumber % 10 + 5) % 10; 
		    plainNumber = plainNumber / 10;
		    index ++;
		}
		
		int temp = digits[0];
		digits[0] = digits[3];
		digits[3] = temp;
		
		temp = digits[1];
		digits[1] = digits[2];
		digits[2] = temp;
		
		System.out.println(digits[3] * 1000 + digits[2] * 100 + digits[1] * 10 + digits[0]);
		for(int i = 0; i<digits.length; i++){
			digits[i] = 0;
		}
	}
NewMoons 2016-08-25
  • 打赏
  • 举报
回复
楼主,你好好对比下我贴给你的源代码和你的有什么不同!!!
soton_dolphin 2016-08-25
  • 打赏
  • 举报
回复
这里做减法是几个意思? 要想得到单个数位的数字,可以用下面的方法 while (number > 0) { print( number % 10); number = number / 10; }
囍新革脸 2016-08-25
  • 打赏
  • 举报
回复
我就是在想怎么会出来负数?怎么算也出不来负数啊!!! 还是题目我就理解错了! 原题是:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 红热字体那块我是没理解透彻吗?
Freefish1994 2016-08-25
  • 打赏
  • 举报
回复
import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		System.out.print("请输入四位数");
		String s = new Scanner(System.in).nextLine();
		System.out.println("加密后的四位数是:");
		int[] n = new int[4];
		if (s.length() == 4) {
			for (int k = n.length - 1; k >= 0; k--) {
				for (int i = 3; i >= 0; i--) {
					n[i] = (Integer.parseInt(String.valueOf(s.charAt(i))) + 5) % 10;
				}
				System.out.print(n[k]);
			}
		} else
			System.out.println("请重新输入");
	}
}
引用 12 楼 soton_dolphin 的回复:
[quote=引用 7 楼 qq_27762917 的回复:]
import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		System.out.print("请输入四位数");
		String s = new Scanner(System.in).nextLine();
		System.out.println("加密后的四位数是:");
		int[] n = new int[4];
		if (s.length() == 4) {
			for (int k = n.length - 1; k >= 0; k--) {
				for (int i = 3; i >= 0; i--) {
					n[i] = (Integer.parseInt(String.valueOf(s.charAt(i))) + 5) % 10;
				}
				System.out.print(n[k]);
			}
		} else
			System.out.println("请重新输入");
	}
}
这个输入的如果不是数字,会抛出异常的[/quote] 写的时候没注意这个,谢谢提醒。。今儿光和Scanner(),next打交道了
soton_dolphin 2016-08-25
  • 打赏
  • 举报
回复

public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
        System.out.print("请输入四位数:");
    	if(input.hasNextInt()){
	        int plainNumber = input.nextInt () ;
	        if((plainNumber / 1000) == 0 || (plainNumber / 1000) > 10){
	        	System.out.println("输入的数字不是4位数。");
	        	return;
	        }
	        
	        int[] digits = new int[4];
	        int index = 0;
			while (plainNumber > 0) {
			    digits[index] = (plainNumber % 10 + 5) % 10; 
			    plainNumber = plainNumber / 10;
			    index ++;
			}
			System.out.println(digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3]);
			for(int i = 0; i<digits.length; i++){
				digits[i] = 0;
			}
        }else{
        	System.out.println("Input is not a number");
        }
	}
soton_dolphin 2016-08-25
  • 打赏
  • 举报
回复
引用 7 楼 qq_27762917 的回复:
import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		System.out.print("请输入四位数");
		String s = new Scanner(System.in).nextLine();
		System.out.println("加密后的四位数是:");
		int[] n = new int[4];
		if (s.length() == 4) {
			for (int k = n.length - 1; k >= 0; k--) {
				for (int i = 3; i >= 0; i--) {
					n[i] = (Integer.parseInt(String.valueOf(s.charAt(i))) + 5) % 10;
				}
				System.out.print(n[k]);
			}
		} else
			System.out.println("请重新输入");
	}
}
这个输入的如果不是数字,会抛出异常的
soton_dolphin 2016-08-25
  • 打赏
  • 举报
回复
* 再将第一位和第四位交换,第二位和第三位交换。 靠,原来是要把数倒过来写。。。
囍新革脸 2016-08-25
  • 打赏
  • 举报
回复
我都给分了 怎么就上来一个5分???
囍新革脸 2016-08-25
  • 打赏
  • 举报
回复
引用 8 楼 qq_26508409 的回复:
[quote=引用 2 楼 XinGeLian 的回复:] 我就是在想怎么会出来负数?怎么算也出不来负数啊!!! 还是题目我就理解错了! 原题是:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 红热字体那块我是没理解透彻吗?
你就千位数是对的[/quote] 这。。。好吧我还是回去继续看课吧,我就在某课网才学到流程控制语句,就出来试题了。还是不行,我看到楼的回复有我刚看到的一个知识点叫 数组 还是先学完在说吧。不行在差缺不漏!
nikyotensai 2016-08-25
  • 打赏
  • 举报
回复
引用 2 楼 XinGeLian 的回复:
我就是在想怎么会出来负数?怎么算也出不来负数啊!!! 还是题目我就理解错了! 原题是:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 红热字体那块我是没理解透彻吗?
你就千位数是对的
Freefish1994 2016-08-25
  • 打赏
  • 举报
回复
import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		System.out.print("请输入四位数");
		String s = new Scanner(System.in).nextLine();
		System.out.println("加密后的四位数是:");
		int[] n = new int[4];
		if (s.length() == 4) {
			for (int k = n.length - 1; k >= 0; k--) {
				for (int i = 3; i >= 0; i--) {
					n[i] = (Integer.parseInt(String.valueOf(s.charAt(i))) + 5) % 10;
				}
				System.out.print(n[k]);
			}
		} else
			System.out.println("请重新输入");
	}
}
NewMoons 2016-08-24
  • 打赏
  • 举报
回复
楼主让我知道了现在java编译器居然认识中文了。 楼主你太心浮气躁了,如此简单的错误也会犯。
import java.util.Scanner;

public class 作业12改版 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入四位数:");
		int i = input.nextInt();// 保存用户输入的四位数
		if (i <= 9999) {
			int i1 = (int) (i / 1000);
			int i2 = (int) ((i - i1 * 1000) / 100);
			int i3 = (int) ((i - i1 * 1000 - i2 * 100) / 10);
			int i4 = (i - i1 * 1000 - i2 * 100 - i3 * 10);
			
			int j1 = (i1+5) % 10; // 千位数加5后除以10的余数
			int j2 = (i2+5) % 10; // 百位数加5后除以10的余数
			int j3 = (i3+5) % 10; // 十位数加5后除以10的余数
			int j4 = (i4+5) % 10; // 个位数加5后除以10的余数
			System.out.print("加密后的四位数是:" + j4 + " " + j3 + " " + j2 + " " + j1);
		} else {
			System.out.println("您输入的不是四位数");
		}
		input.close();//这句话别漏了。
	}
}

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧