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
//
//*********************************************************************
//看到这个结果我就懵逼了,怎么能是这样的呢!!!!是我的错吗,还是就是这样的!!!
...全文
231 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();//这句话别漏了。
	}
}
内容概要:本文围绕“【EI复现】考虑灵活性的数据中心微网两阶段鲁棒规划方法(Matlab代码实现)”展开,提出了一种针对数据中心微电网的两阶段鲁棒优化规划模型,重点考虑系统在运行过程中面临的灵活性需求与不确定性因素。该方法通过构建第一阶段的投资决策与第二阶段的运行调整机制,有效应对源荷双重不确定性,提升微网系统的可靠性与经济性。文中采用鲁棒优化理论处理不确定性,并结合Matlab编程实现完整的模型求解流程,提供了可复现的算法代码,便于科研人员验证与拓展。该研究对于高比例可再生能源接入背景下的数据中心能源系统规划具有重要参考价值。; 适合人群:具备一定电力系统、优化理论及Matlab编程基础,从事微电网、综合能源系统、鲁棒优化等相关领域研究的研究生、科研人员及工程技术人员(尤其适合有1-3年科研经验者);; 使用场景及目标:① 掌握两阶段鲁棒优化在微网规划中的建模思路与数学表达;② 学习如何将灵活性指标融入能源系统规划模型;③ 复现EI级别高水平论文的核心算法,提升科研能力与论文写作水平;④ 为后续开展数据中心、智能微网、不确定性优化等方向的研究提供技术积累与代码基础; 阅读建议:建议读者结合文中提供的Matlab代码逐行分析,理解两阶段鲁棒优化的建模技巧与求解流程,重点关注不确定性集的构建、列与约束生成(C&CG)算法的实现逻辑,并尝试对模型参数或结构进行修改以观察结果变化,从而深化对鲁棒优化机制的理解。
内容概要:本文围绕具有源荷不平衡特性的配电网,研究智能软开关(Soft Open Point, SOP)与储能系统(Energy Storage System, ESS)的联合规划方法。通过构建优化模型,综合考虑配电网中分布式电源出力与负荷需求之间的时空不匹配问题,利用智能软开关灵活调节功率流动的能力以及储能系统的能量时移特性,实现对配电网潮流的有效调控,提升系统运行的经济性与可靠性。文中采用Matlab进行仿真编程,验证所提联合规划方案在降低网络损耗、改善电压质量、提高可再生能源消纳能力等方面的优越性能。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的高校研究生、科研人员以及从事智能配电网规划与运行工作的工程技术人员。; 使用场景及目标:①解决高比例分布式可再生能源接入背景下配电网源荷不平衡导致的电压越限与潮流倒送问题;②优化配置智能软开关与储能的位置和容量,以实现系统综合成本最小化与运行性能最优化;③为新型配电系统中柔性元件的协同规划提供技术参考与仿真工具支持。; 阅读建议:此资源以Matlab代码实现为核心载体,建议读者在理解数学模型与物理机理的基础上,结合实际算例(如IEEE 33节点系统)进行代码调试与结果分析,进一步掌握SOP与储能协同作用的内在机制,并可在此基础上拓展多目标优化、不确定性建模等高级功能。

62,625

社区成员

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

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