为什么Scanner需要system.random.nextin而random不需要

15:10 提问
Scnner类的next()方法,返回的值为什么在比较前需要toString一下
Scanner input = new Scanner(System.in);
System.out.println("请输入预测结果:花/数字");
String result = input.next();
System.out.println("接收的字符串:"+result);
//生成随机数(偶数为花/奇数为数字)
String res = "";
Random rand = new Random();
int num = rand.nextInt();
if(num%2 == 0){
res = "花";
res = "数字";
System.out.println("结果:"+res);
if(result.toString().equals(res)){
System.out.println("预测正确!");
System.out.println("失败了,下次努力!");
如果在比较的时候不加 toString() 时,返回的boolean类型总为 false,这是为什么啊?
按赞数排序
我把你的代码去掉tostring运行了下 没问题,没有你所说的问题
其他相似问题> 由Java挟制类型转换的实例所想到的
由Java挟制类型转换的实例所想到的
发布时间: & &
浏览:2 & &
回复:0 & &
悬赏:0.0希赛币
由Java强制类型转换的实例所想到的
  在学习Java的数据类型时曾发现int型可以直接强制转换成为char型。这个样子我们是不是可以利用random的伪随机数来生成一个网页上的英文验证码呢?
  首先查询JavaDOC关于int型和char型的转换机制,发现int中的97~122的ASICS编码对应char中的a~z的小写字母。所以,基于此,我们可以这样子来生成一个六位验证码。 设计强制类型转换的实例如下:
  public class RandomStr {
public static void main (String []args) {
String result = "";//定义一个空字符串
//进行六次循环
for (int i = 0; i&6;i++) {
//生成一个97~122的int型整数
int intVal = (int)(Math.random()*26 + 97);
//将intValue强制转换成char后连接到result后面
result = result + (char)intV
//输出随机字符串
System.out.println("你要的验证码为:" + result);
  进行测试,成功输出6位的英文字符串,测试成功喽。  
基于此,俺不由得玩心胜起。一个验证码怎么只有生成没有验证呢?所以我们再来个验证。  
应用了循环嵌套+分支后设计代码如下:
  import java.util.S
public class RandomStr {
public static void main (String []args) {
int k = 0;//定义一个int型变量来做开关,控制是否继续验证
while (k & 1) {
String result = "";//定义一个空字符串
//进行六次循环
int i = 0;
while (i &= 5) {
//生成一个97~122的int型整数
int intVal = (int)(Math.random()*26 + 97);
//将intValue强制转换成char后连接到result后面
result = result + (char)intV
//输出随机字符串
System.out.println("你要的验证码为:" + result + "\n");
Scanner scan = new Scanner(System.in);//调用Scanner类的使用System.in的方法实例化一个对象scan
System.out.println("请输入你看到的验证码:");
String input = scan.next();//将输入的字母转换成一个名为input的String类
if (input.equals(result)) {//调用String类的equals()方法进行比较
System.out.println("验证通过。");
k = 1;//跳出验证循环
// //这个也可以
System.out.println("验证失败,请重新输入");
System.out.println("验证成功就不会一直重复循环验证喽!");
  运行测试,可以生成6位的验证码,并且可以比较你的输入是否正确,如果错误就会一直验证下去。  
可是我还是觉得这个程序不够完美,为什么呢?因为它从头到尾都是纯文字的,没有图形化的输入。而且 ,一般验证码的验证是有错误次数限制的,一般为三次。所以,在闲的无聊的情况下我们可以将它图形化。  
怎么图形化呢?查询API后发现这个就得使用Swing框架进行编程,我们引入javax.swing.JOptionPane包。使用它来实现图形化。设计代码如下:
  import javax.swing.JOptionP
public class RandomStr {
public static void main (String []args) {
boolean Ifcontionue =//定义一个boolean型变量来做开关,控制是否继续验证
int Errcount = 0;//统计验证错误次数
while (Ifcontionue) {//由boolean参数生成的验证循环
String result = "";//验证字符串的声明。定义一个空字符串。
for (int i = 0 ; i &= 5 ; i++) {//这两行实现五次循环
int temp = (int)(Math.random() * 26 +97);//生成一个97~122的一个随机数。
result = result + (char)//由于97~122的int型对应a~z的char型,所以使用强制类型转换。获得a~z的随机字母
String input = JOptionPane.showInputDialog("请输入验证码:"+result);
if (input.equals(result)) {//使用String的方法进行输入的比较。相同为true,反之为false
JOptionPane.showMessageDialog(null,"验证通过","正确提示",RMATION_MESSAGE);
Ifcontionue =//此参数跳出验证的循环,也可使用
Errcount++;
JOptionPane.showMessageDialog(null,"验证失败,请重新验证!\n当前错误次数:"+Errcount,"错误提示", JOptionPane.ERROR_MESSAGE);
if (Errcount &= 3) {
JOptionPane.showMessageDialog(null,"错误次数超过3次,程序自动退出。","o(︶︿︶)o 唉", JOptionPane.WARNING_MESSAGE);
Ifcontionue =
  运行测试:可以使用对话框输入,并且给予是否正确的提示,自动计算错误次数,实现3次自动退出。  
但是还是不够完美,为什么?1、验证码不是大写的。2、在验证码是大写的前提下,如何忽略大小写。3、没有自定义生成的验证码长度。  
第三个很好解决,主要会用到Integer包装类。前两个呢?进行查询API文档之后我发现String下面早就为我们准备好了相关方法。也就是toUpperCase()方法将字符串按一定规则变为大写字母,equalsIgnoreCase()就是忽略大小写的比较方法。所以设计出来的代码如下:
  import javax.swing.JOptionP
public class RandomStr {
public static void main (String []args) {
boolean Ifcontinue =
int Errcount = 0;//统计验证错误次数
String length = JOptionPane.showInputDialog("请输入你要生成的验证码长度:");
int finallength = Integer.parseInt(length);//使用包装类实现验证码长度的定义
while (Ifcontinue) {//由Ifcontinue参数定义的验证循环
String result = "";//验证字符串的声明。定义一个空字符串。
for (int i = 0; i & i++) {//实现自定义次循环产生验证码
int temp = (int)(Math.random() * 26 +97);//生成一个97~122的一个随机数。
result = result + (char)//由于97~122的int型对应a~z的char型,所以使用强制类型转换。获得a~z的随机字母
result = result.toUpperCase();
String input = JOptionPane.showInputDialog("请输入验证码:"+result+"\n(不记大小写)");
if (input.equalsIgnoreCase(result)) {//使用String的方法进行输入的比较。相同为true,反之为false
JOptionPane.showMessageDialog(null,"验证通过","正确提示",RMATION_MESSAGE);
Ifcontinue =//此参数跳出验证的循环,也可使用
Errcount++;
JOptionPane.showMessageDialog(null,"验证失败,请重新验证!\n当前错误次数:"+Errcount,"错误提示", JOptionPane.ERROR_MESSAGE);
if (Errcount &= 3) {
JOptionPane.showMessageDialog(null,"错误次数超过3次,程序自动退出。","o(︶︿︶)o 唉", JOptionPane.WARNING_MESSAGE);
Ifcontinue =
  运行测试:这个样子实现了自定义验证码长度,并且验证码显示为大写,可以忽略你输入的大小写。 可是还是不够完美啊。一般的验证码怎么可以没有数字,怎么可以只有大写英文字母。应该大小写英文字母都有才可以。 这些怎么办?怎么弄?其实都很简单哦,就是用之前的伪随机数。大家可以试试。 想出来了吗?没有?可以参考我的设计,设计代码如下:
  import javax.swing.JOptionP
public class RandomStr {
public static void main (String []args) {
boolean Ifcontinue =
int Errcount = 0;//统计验证错误次数
String length = JOptionPane.showInputDialog("请输入你要生成的验证码长度:");
int finallength = Integer.parseInt(length);//使用包装类实现验证码长度的定义
while (Ifcontinue) {//由Ifcontinue参数定义的验证循环
String result = "";//验证字符串的声明。定义一个空字符串。
for (int i = 0; i & i++) {//实现自定义次循环产生验证码
int temp = 0;//定义一个中间变量存放验证码随机数
int Ifnum = (int)(Math.random()*2);//用来判断是否生成数字,由于Ifnum的结果只能为0,1且概率都为50%。所以1为数字随机,0为字母随机
if (Ifnum == 0) {//字母部分
temp = (int)(Math.random() * 26 +97);//生成一个97~122的一个随机数。
int Ifuppercase = (int)(Math.random()*2);//用来判断是否生将字母大小写。1为小写,0为大写
if (Ifuppercase == 0) {//大写字母部分
String uppTemp = "";//定义一个名为uppTemp的String类以存放转换为大写中间量
uppTemp = uppTemp +(char)//获得a~z的随机字母,赋予uppTemp中间变量
uppTemp = uppTemp.toUpperCase();//获得大写随机字母
result = result + uppT
} else {//小写字母部分
result = result + (char)//由于97~122的int型对应a~z的char型,所以使用强制类型转换。获得a~z的随机字母
if (Ifnum == 1) {//数字部分,此处也可写为 else {
temp = (int)(Math.random()*10);//随机生成0~9
result = result +//由自动类型转换得知,int型自动转换为String类
String input = JOptionPane.showInputDialog("请输入验证码:"+result+"\n(不记大小写)");
if (input.equalsIgnoreCase(result)) {//使用String的方法进行输入的比较。相同为true,反之为false
JOptionPane.showMessageDialog(null,"验证通过","正确提示",RMATION_MESSAGE);
Ifcontinue =//此参数跳出验证的循环,也可使用
Errcount++;
JOptionPane.showMessageDialog(null,"验证失败,请重新验证!\n当前错误次数:"+Errcount,"错误提示", JOptionPane.ERROR_MESSAGE);
if (Errcount &= 3) {
JOptionPane.showMessageDialog(null,"错误次数超过3次,程序自动退出。","o(︶︿︶)o 唉", JOptionPane.WARNING_MESSAGE);
Ifcontinue =
  运行结果,应该是目前比较完美的验证码生成+验证。(个人这么认为)  
应用:这个看似没有用处。可是以面向对象的思路我们可以将其编写成为一个类用来专门生成验证码,并提供几个方法。现在假设我们定义一个creat(int length)来生成验证码的长度;verify()来确认是否验证正确,正确的话返回true,错误来返回false。以此来应用实际程序中,可谓是一个不错的思路。    现在我们就来设计这样的一个类(PS.懒得画类图了)
  由此我们设计出来的类可以是这个样子:
* Copyleft
2011 Syhily
* @author Syhily
* @version 1.4
import javax.swing.JOptionP
public class RandomStr {
private int length = 6;// 定义 length 用于指定验证码的长度
int ErrNum = 3;// 定义 ErrNum 用于指定可以错误的次数,默认是3次。由于要打印错误次数所以不能private
private boolean IfNum =// 定义一个 IfNum 用于确认生成的验证码是否含有数字,默认没有
private boolean IfEng =// 定义一个 IfEng 用于确认生成的验证码是否含有字母,默认为true
private boolean IfEngSize =// 定义一个 IfEngSize
// 用于确认生成的验证码是否需要大小写字母,默认不需要
private String result = ""; // 定义一个 result来存放最终生成的字符串
int ErrCount = 0;// 定义一个 ErrCount 来统计错误的次数。由于要打印当前错误次数所以不能private
private boolean IfVerEngSize =// 定义一个 IfVerEngSize
// 用于确认比较验证码时是否需要比较字母大小写,默认为false
* 定义一个构造方法,指定生成对象的验证码长度
* @param 由构造方法里的int型变量确定验证码长度
* @return 没有返回值
public RandomStr(int a) {
* 定义一个方法,指定验证码允许的验证失败的次数
* @param 由构造方法里的int型变量确定验证失败的次数
,不指定时默认为3次
* @return 没有返回值
public void definErrNum(int d) {
* 定义一个方法,指定验证码是否可以包含数字
* @param 由构造方法里的boolean型变量确定验证码是否可以包含数字
,true时将会包含数字。默认不包含
* @return 没有返回值
public void ifNum(boolean f) {
* 定义一个方法,指定验证码是否可以包含字母
* @param 由构造方法里的boolean型变量确定验证码是否可以包含字母
,true时将会包含字母。默认包含
* @return 没有返回值
public void ifEng(boolean g) {
* 定义一个方法,指定生成的验证码是否需要字母大小写
* @param 由构造方法里的boolean型变量确定验证码是否需要字母大小写
,true时将会生成有大小写字母的验证码。默认为大写
* @return 没有返回值
public void ifEngSize(boolean h) {
IfEngSize =
* 定义一个方法,指定比较验证码时否需要比较字母大小写
* @param 由构造方法里的boolean型变量确定比较验证码时否需要比较字母大小写
,true时将会比较字母的大小写。默认忽略大小写
* @return 没有返回值
public void ifVerEngSize(boolean i) {
IfVerEngSize =
* 定义一个方法,以此获得验证码
* @param 由构造方法里没有指定参数
,调用内部的CreatString()方法生成字符串 ,使用此方法将会返回一个随机的String类的验证码
* @return 返回生成的一个随机验证码
public String getStr() {
CreatString();
* 定义一个方法,比较你输入的验证码和之前获得验证码是否相同
* @param 由构造方法里的String类同之前getStr
()方法生成的字符串进行比较,默认忽略大小写
* @see getStr()
* @return 返回生成的一个随机验证码
public boolean compareStr(String e) {
boolean Ifequal =// 定义返回的boolean,也就是验证是否相等
if (IfVerEngSize) {
Ifequal = result.equals(e);
Ifequal = result.equalsIgnoreCase(e);
* 定义一个方法,比较你输入的验证码和之前获得验证码是否相同
* @param 由构造方法里的String类同之前getStr
()方法生成的字符串进行比较,默认忽略大小写
* @see getStr()
* @see compareStr(String e)
* @return 返回生成的一个随机验证码
public boolean startVer(boolean b, boolean c) {
IfEngSize =
boolean Ifsuccess =// 定义返回的boolean,也就是验证是否成功
boolean Ifcontinue =// 定义Ifcontinue这个boolean类型的值用于确定是否继续验证
* 这个部分同getStr()一样就是生成一个验证码喽。调用CreatString()方法生成
while (Ifcontinue) {
result = "";
CreatString();
* 这个部分同compareStr(String e)类似,只是将以对话框的形式进行确认。代码选用之前设计的RandomStr
if (IfVerEngSize) {
String input = JOptionPane.showInputDialog("请输入验证码:" + result
+ "\n(区分大小写)");
if (input.equals(result)) {// 使用String的方法进行输入的比较。相同为true,反之为false
JOptionPane.showMessageDialog(null, "验证通过", "输入正确",
RMATION_MESSAGE);
Ifsuccess =// 确定返回量为true
Ifcontinue =// 此参数跳出验证的循环,也可使用
ErrCount++;
JOptionPane.showMessageDialog(null, "验证失败,请重新验证!\n当前错误次数:"
+ ErrCount, "输入错误", JOptionPane.ERROR_MESSAGE);
if (ErrCount &= ErrNum) {
JOptionPane.showMessageDialog(null, "错误次数超过" + ErrNum
+ "次,程序自动退出。", "o(︶︿︶)o 唉",
JOptionPane.WARNING_MESSAGE);
Ifcontinue =
String input = JOptionPane.showInputDialog("请输入验证码:" + result
+ "\n(不记大小写)");
if (input.equalsIgnoreCase(result)) {// 使用String的方法进行输入的比较。相同为true,反之为false
JOptionPane.showMessageDialog(null, "验证通过", "输入正确",
RMATION_MESSAGE);
Ifsuccess =// 确定返回量为true
Ifcontinue =// 此参数跳出验证的循环,也可使用
ErrCount++;
JOptionPane.showMessageDialog(null, "验证失败,请重新验证!\n当前错误次数:"
+ ErrCount, "输入错误", JOptionPane.ERROR_MESSAGE);
if (ErrCount &= ErrNum) {
JOptionPane.showMessageDialog(null, "错误次数超过" + ErrNum
+ "次,程序自动退出。", "o(︶︿︶)o 唉",
JOptionPane.WARNING_MESSAGE);
Ifcontinue =
* 定义一个方法,根据预设好的参数来生成验证码字符串。
* @param 根据预设好的参数变量来生成验证码字符串
。不可以直接被外部类访问只能通过内部类调用产生相应的字符串。
* @return 返回String类的字符串验证码
private String CreatString() {
for (int i = 0; i & i++) {// 实现自定义次循环产生验证码
int temp = 0;// 定义一个中间变量存放验证码随机数
if (IfNum && IfEng && IfEngSize) {
int Ifnum = (int) (Math.random() * 2);// 用来判断是否生成数字,由于Ifnum的结果只能为0,1且概率都为50%。所以1为数字随机,0为字母随机
if (Ifnum == 0) {// 字母部分
temp = (int) (Math.random() * 26 + 97);// 生成一个97~122的一个随机数。
int Ifuppercase = (int) (Math.random() * 2);// 用来判断是否生将字母大小写。1为小写,0为大写
if (Ifuppercase == 0) {// 大写字母部分
String uppTemp = "";// 定义一个名为uppTemp的String类以存放转换为大写中间量
uppTemp = uppTemp + (char)// 获得a~z的随机字母,赋予uppTemp中间变量
uppTemp = uppTemp.toUpperCase();// 获得大写随机字母
result = result + uppT
} else {// 小写字母部分
result = result + (char)// 由于97~122的int型对应a~z的char型,所以使用强制类型转换。获得a~z的随机字母
if (Ifnum == 1) {// 数字部分,此处也可写为 else {
temp = (int) (Math.random() * 10);// 随机生成0~9
result = result +// 由自动类型转换得知,int型自动转换为String类
if (IfNum && IfEng) {
int Ifnum = (int) (Math.random() * 2);// 用来判断是否生成数字,由于Ifnum的结果只能为0,1且概率都为50%。所以1为数字随机,0为字母随机
if (Ifnum == 0) {// 字母部分
temp = (int) (Math.random() * 26 + 97);// 生成一个97~122的一个随机数。
String uppTemp = "";// 定义一个名为uppTemp的String类以存放转换为大写中间量
uppTemp = uppTemp + (char)// 获得a~z的随机字母,赋予uppTemp中间变量
uppTemp = uppTemp.toUpperCase();// 获得大写随机字母
result = result + uppT
if (Ifnum == 1) {// 数字部分,此处也可写为 else {
temp = (int) (Math.random() * 10);// 随机生成0~9
result = result +// 由自动类型转换得知,int型自动转换为String类
if (IfNum) {
temp = (int) (Math.random() * 10);// 随机生成0~9
result = result +// 由自动类型转换得知,int型自动转换为String类
if (IfEng && IfEngSize && IfNum == false) {
temp = (int) (Math.random() * 26 + 97);// 生成一个97~122的一个随机数。
int Ifuppercase = (int) (Math.random() * 2);// 用来判断是否生将字母大小写。1为小写,0为大写
if (Ifuppercase == 0) {// 大写字母部分
String uppTemp = "";// 定义一个名为uppTemp的String类以存放转换为大写中间量
uppTemp = uppTemp + (char)// 获得a~z的随机字母,赋予uppTemp中间变量
uppTemp = uppTemp.toUpperCase();// 获得大写随机字母
result = result + uppT
} else {// 小写字母部分
result = result + (char)// 由于97~122的int型对应a~z的char型,所以使用强制类型转换。获得a~z的随机字母
if (IfEng && IfNum == false) {
temp = (int) (Math.random() * 26 + 97);// 生成一个97~122的一个随机数。
String uppTemp = "";// 定义一个名为uppTemp的String类以存放转换为大写中间量
uppTemp = uppTemp + (char)// 获得a~z的随机字母,赋予uppTemp中间变量
uppTemp = uppTemp.toUpperCase();// 获得大写随机字母
result = result + uppT
  至于怎么使用这个类,我们可以编写一个驱动类来调用:  
学习心得:一个简单的强制类型转换的实例玩出这么多的花样,这个本来也是我所没有想到的。但是这样也体现出了程序世界的精彩。同时,此次实践最关键的是API文档的查询。一切基础就是JavaDOC,通过它我们找到各种类库,和它们提供的方法,以此来实现我们的编程。当然程序的各种判定也体现了Java这种面向对象编程语言在“类”这个结构下面的结构化编程,分支循环的利用可以使你的程序更加人性化、健壮。
  最后我要小小的吐槽一下,ITeye的日志编辑器编辑代码真的很蛋疼!
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&| 您所在的位置: >
> 算法洗脑系列第一篇:递推思想算法洗脑系列第一篇:递推思想更新:&&&&编辑:下雨的日子&&&&来源:谷普网&&&&人气:加载中...&&&&字号:|标签:&&&&&&&&&&&&
像俺一样奋斗在一线的码农们,一谈到学编程,都是说要学会XX语言就OK了,其实我们理解的有一点点的偏差,因为我们只说到了三分之一,其实真正的编程应该是:编程=数据结构++XX语言。 & &对的,XX语言只是一个而已,就好比我们用笔来写字,但是不见得我们就能写出一手让张恨水为之倾倒的好字,其实我也说过不仅仅用于中,在我们的中也处处存在着算法,比如记得我大二学C#的时候,无聊的我们就出了个猜芳龄的。@Test
public void testMeiMei() {
Random random = new Random();
Scanner scanner = new Scanner(System.in);
int mm = random.nextInt(17) + 16;
int guess = 0;
int count = 0;
System.out.println(mm + "现有一,请猜她的芳龄(16,32)n");
System.out.println("请输入你认为正确的年龄:t");
guess = scanner.nextInt();
} catch (Exception e) {
if (guess & mm)
System.out.println("低了!n");
if (guess & mm)
System.out.println("高了!n");
if (guess == mm)
System.out.println("恭喜,猜对了!n");
count = count + 1;
} while (mm != guess);
System.out.println("你一共猜了:t" + count + "次");
}针对这个,大家如何 “又快又稳” 的猜出mm的芳龄呢?如果是一个不懂算法的人,估计就是一个for循环进行查找,但是这个的繁杂度是O(n)。那么懂算法的人就会利用年龄有序这个特点进行&二分查找“,这个繁杂度就是log2N,所以说学算法,懂算法可以给我们实际中带来更好的方案。好了,不扯了,今天主要讲的是“递推”。一: 概念 & & 通过已知条件,利用特定关系逐步递推,最终得到结果为止,核心就是不断的利用现有信息推导出新的东西。二: & & 当然递推中有两种,“顺推”和“逆推“ & & 顺推:从条件推出结果。 & & 逆推:从结果推出条件。呵呵,是不是觉的有一种policeman破案的感到。三: 举例&1& 顺推的例子 & & &上过大学的应该都著名的“斐波那契”数列吧,说的是孳生兔子的问题,题目我就大概说一下。如果1对兔子每月能生1对小兔子,而每对小兔在它出生后的第3个月就可以生1对小兔子,如果从1对初生的小兔子开始,1年后能孳生多少兔子?思路:其实这个问题我们可以将兔子划分为“1月大的兔子“,”2月大的兔子“,”3月大的兔子“。 & & & &① 初始时: & & & & & &一对1月大小兔子,总数为1对。 & & & &② 个月: & & & & 1月大的小兔子变成2月大的兔子,总数还是1对。 & & & &③ 第二个月: & & & & 2月大的小兔子变成3月大的兔子,孳生了一对小兔子,总数为2对。 & & & &④ 第三个月: & & & & 3月大的兔子tmd有生了一对小兔子,上个月1月大的小兔子变成了2月大的兔子,总数为3对。 & & & & ...... & & & & & & & & & &...... & & & &F0=1 & & & &F1=1 & & & &F2=F0+F1 & & & &F3=F1+F2 & & & &...... & & & &Fn=Fn-2+Fn-1大家看看,是不是体现了”递推“的核心,代码也很简单。@Test
public void feibonaqie() {
int month = 12;
int[] f = new int[month];
for (int i = 2; i & i++) {
f[i] = f[i - 2] + f[i - 1];
for (int i = 0; i & i++) {
System.out.println("第 " + i + " 个月,兔子总数:" + f[i]);
}结果:第 0 个月,兔子总数:1
第 1 个月,兔子总数:1
第 2 个月,兔子总数:2
第 3 个月,兔子总数:3
第 4 个月,兔子总数:5
第 5 个月,兔子总数:8
第 6 个月,兔子总数:13
第 7 个月,兔子总数:21
第 8 个月,兔子总数:34
第 9 个月,兔子总数:55
第 10 个月,兔子总数:89
第 11 个月,兔子总数:144&2& 逆推的例子 & & & 这个一个存钱的问题,一个富二代给他儿子的四年大学存一笔钱,富三代每月只能取3k作为下个月的生活费,采用的是整存零取的方式, & 年利率在1.71%,请问富二代需要一次性存入多少钱。思路: 这个题目是我们知道了结果,需要逆推条件, 第48月富三代要连本带息的把3k一把取走,那么 & & & &第47月存款应为: (第48个月的存款+3000)/(1+0.0171/12(月)); & & & &第46月存款应为: (第47个月的存款+3000)/(1+0.0171/12(月)); & & & & ..... & & & & & & & & & &..... & & & &第1个月存款应为: (第2个月的存款+3000)/(1+0.0171/12(月));@Test
public void deposit() {
int month = 49;
double[] f = new double[month];
f[48] = 3000d;
double monthRate = 1.71 / 100 / 12;
for (int i = 47; i & 0; i--) {
f[i] = (f[i + 1] + 3000) / (1 + monthRate);
for (int i = 48; i & 0; i--) {
System.out.println("第 " + i + " 个月,本息总额:" + f[i]);
}第 48 个月,本息总额:3000.0
第 47 个月,本息总额:12862
第 46 个月,本息总额:32548
第 45 个月,本息总额:421421
第 44 个月,本息总额:922532
第 43 个月,本息总额:671875
第 42 个月,本息总额:11064
第 41 个月,本息总额:097452
第 40 个月,本息总额:920566
第 39 个月,本息总额:310073
第 38 个月,本息总额:450085
第 37 个月,本息总额:99087
第 36 个月,本息总额:06103
第 35 个月,本息总额:279605
第 34 个月,本息总额:768184
第 33 个月,本息总额:163
第 32 个月,本息总额:627006
第 31 个月,本息总额:86193
第 30 个月,本息总额:12031
第 29 个月,,本息总额:21753
第 28 个月,本息总额:5438
第 27 个月,本息总额:076196
第 26 个月,本息总额:39056
第 25 个月,本息总额:67352
第 24 个月,本息总额:7344
第 23 个月,本息总额:01712
第 22 个月,本息总额:61215
第 21 个月,本息总额:26834
第 20 个月,本息总额:40483
第 19 个月,本息总额:1229
第 18 个月,本息总额:2178
第 17 个月,本息总额:19052
第 16 个月,本息总额:2597
第 15 个月,本息总额:37331
第 14 个月,本息总额:3002205
第 13 个月,本息总额:
第 12 个月,本息总额:0666483
第 11 个月,本息总额:
第 10 个月,本息总额:
第 9 个月,本息总额:
第 8 个月,本息总额:
第 7 个月,本息总额:
第 6 个月,本息总额:
第 5 个月,本息总额:
第 4 个月,本息总额:
第 3 个月,本息总额:6341383
第 2 个月,本息总额:442308
第 1 个月,本息总额:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
分类选择您可能在找这些

我要回帖

更多关于 python systemrandom 的文章

 

随机推荐