由于数据类型,While 循环在计算前退出 [英] While loop exiting before computation because of datatypes

查看:22
本文介绍了由于数据类型,While 循环在计算前退出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的程序规范如下.1. 四位数字都不一样 2. 千位数字是十位数字的三倍 3. 数字是奇数.4. 数字之和为 27.我遗漏了整个程序的一些代码.它有一个干净的编译,但是当它运行时它会自动终止.我认为问题出在数据类型的转换上.

My program specifications are as follows. 1. All four digits are different 2. The digit in the thousands place is three times the digit in the tens place 3. The number is odd. 4. The sum of the digits is 27. I left out some code of the whole program. It has a clean compile but when it runs it automatically terminates. I think the problem lies somewhere in the conversion of the datatypes.

int randomNumber = rand.nextInt(9000) + 1000;
String randomString;
boolean found = true;   

while (found)
{   

// converting to string to find position of digits and value        
randomString = String.valueOf(randomNumber);

// converting to char to transfer back to in while knowing the position of the digits 
char position0a = randomString.charAt(0);
char position1a = randomString.charAt(1);
char position2a = randomString.charAt(2);
char position3a = randomString.charAt(3);

// coverted back to int
int position0 = Character.getNumericValue(position0a);
int position1 = Character.getNumericValue(position1a);
int position2 = Character.getNumericValue(position2a);
int position3 = Character.getNumericValue(position3a);

int sumCheck = position0a + position1a + position2a + position3a;
int digit30Check = 3 * position2;

//checking addition to 27
String sumCheck27 = "27";
String sumCheck28 = String.valueOf(sumCheck);

// checking all digits are different
if (position0 != position1 && position0 != position2 && position0 != position3  &&

position1 != position2 && position1 != position3 && position2 != position3) 
{
if (position3 != digit30Check) // check if the digit in the thousands place 3 * tens
{
    if (sumCheck27.equals(sumCheck28)) // check if the sum is 27
    {
        if (position0 != 1 && position0 != 3 
&& position0 != 5 && position0 != 7 &&      
position0 != 9 && position1 != 1 && position1 != 3 
&& position1 != 5 && position1 != 7 && 
position1 != 9 && position2 != 2 && position2 != 3 
&& position2 != 5 && position2 != 7 && 
position2 != 9 && position3 != 3 && position3 != 3 && 
position3 != 5 && position3 != 7 && position3 != 9)
        { 
// checks for odd digits
         found = false;
         System.out.println(randomNumber);

        }
        else 
        randomNumber = rand.nextInt(9000) + 1000;
    }
    else 
    randomNumber = rand.nextInt(9000) + 1000;               
}
else 
randomNumber = rand.nextInt(9000) + 1000; 
}
else 
 randomNumber = rand.nextInt(9000) + 1000; 

 // end while
 }

推荐答案

boolean found = false;  

while (found)

仅此一项就可以确保永远不会进入 while 循环,因为 found 是假的.while 循环中的任何内容都没有任何区别,因为它永远不会被执行.

This alone ensures the while loop will never be entered, since found is false. Anything inside the while loop doesn't make any difference, since it will never be executed.

你可能打算写

while (!found)

除此错误外,您的条件过于复杂.以下是简化它们的方法:

Beside this error, your conditions are over complicated. Here's how you can simplify them :

if ((position0 == (3 * position2)) && // note that position0 is the "thousands place", not position3
    ((position0+position1+position2+position3) == 27) && // sum of digits
    (position3 % 2 == 1) && // odd number
    (position0 != position1 && position0 != position2 && position0 != position3  &&
     position1 != position2 && position1 != position3 && position2 != position3)) { // different digits
    found = true;
}

这篇关于由于数据类型,While 循环在计算前退出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆