Java 尝试编写返回特定数字的数学测试代码时遇到的问题
我的问题似乎很简单,但我对编程比较陌生,我无法找出我的代码出了什么问题 我应该返回n(最大1000000)以下同时包含7和9的数字数。例如,n=10返回0,n=100返回2(来自79和97),等等Java 尝试编写返回特定数字的数学测试代码时遇到的问题,java,loops,Java,Loops,我的问题似乎很简单,但我对编程比较陌生,我无法找出我的代码出了什么问题 我应该返回n(最大1000000)以下同时包含7和9的数字数。例如,n=10返回0,n=100返回2(来自79和97),等等 int all with 7或9(int n) { 整数计数=0; 对于(int i=0;i
int all with 7或9(int n)
{
整数计数=0;
对于(int i=0;i
我意识到我本可以使用&,我也尝试过,但我的代码总是出现0,我不知道为什么。我至少用3种不同的方式实现了这一点
下面是我尝试的另一个实现:
int allWith7Or9(int n)
{
int count = 0;
for(int i = 0; i < n; i++)
{
if((i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7
|| i%1000000==7) && (i%10==9 || i%100==9 || i%1000==9
|| i%10000==9 || i%100000==9 || i%1000000==9))
{
count++;
}
}
return count;
}
int all with 7或9(int n)
{
整数计数=0;
对于(int i=0;i
谢谢大家!
if(i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7 || i%1000000==7)
{
if(i%10==9 || i%100==9 || i%1000==9 || i%10000==9 || i%100000==9 || i%1000000==9)
{
count++;
}
}
基本上
if(cond1)
{
if(cond2)
{
count++;
}
}
基本上是:
if(cond1 && cond2)
{
count++;
}
因为这两个条件都必须为真才能递增计数
这些条件同时也不成立,因为
i % 100 == 7
这可能不是你的意思。这不是检查像70,71之类的数字,而是检查当除以100时有余数7的数字,比如7,107,207。所以
i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7 || i%1000000==7
仅当i==7
时匹配,并且
i%10==9 || i%100==9 || i%1000==9 || i%10000==9 || i%100000==9 || i%1000000==9
仅当i==9
时匹配<代码>7!=9,因此计数器不会增加
您可以将条件重写为:
i%10==7 || (i/10)%10==7 || (i/100)%10==7 etc
但是像这样把它全部写出来是混乱和容易出错的
相反,请使用循环:
boolean found7 = false;
boolean found9 = false;
for (int ii = i; ii > 0: ii /= 10) {
switch (ii % 10) {
case 7: found7 = true; break;
case 9: found9 = true; break;
}
}
if (found7 && found9) {
count++;
}
这将使用两个标志指示找到的数字。检查最后一个数字是7还是9,然后除以10放弃该数字并继续下一个数字
基本上
if(cond1)
{
if(cond2)
{
count++;
}
}
基本上是:
if(cond1 && cond2)
{
count++;
}
因为这两个条件都必须为真才能递增计数
这些条件同时也不成立,因为
i % 100 == 7
这可能不是你的意思。这不是检查像70,71之类的数字,而是检查当除以100时有余数7的数字,比如7,107,207。所以
i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7 || i%1000000==7
仅当i==7
时匹配,并且
i%10==9 || i%100==9 || i%1000==9 || i%10000==9 || i%100000==9 || i%1000000==9
仅当i==9
时匹配<代码>7!=9,因此计数器不会增加
您可以将条件重写为:
i%10==7 || (i/10)%10==7 || (i/100)%10==7 etc
但是像这样把它全部写出来是混乱和容易出错的
相反,请使用循环:
boolean found7 = false;
boolean found9 = false;
for (int ii = i; ii > 0: ii /= 10) {
switch (ii % 10) {
case 7: found7 = true; break;
case 9: found9 = true; break;
}
}
if (found7 && found9) {
count++;
}
这将使用两个标志指示找到的数字。检查最后一位数字是否为7或9,然后除以10放弃该数字并继续下一位。好,第一个条件错误。例如79。 7的条件不起作用79%10=9,79%100=79。没有检测到7个。 它应该类似于遍历数字的所有数字。所以检查一个数字可以是这样的
boolean have7and9(int a) {
boolean seven = false, nine = false;
while(a > 0) {
if (a%10 == 7) seven = true;
if (a%10 == 9) nine = true;
a /= 10;
}
return seven && nine;
}
好的,第一个条件是错误的。例如79。 7的条件不起作用79%10=9,79%100=79。没有检测到7个。 它应该类似于遍历数字的所有数字。所以检查一个数字可以是这样的
boolean have7and9(int a) {
boolean seven = false, nine = false;
while(a > 0) {
if (a%10 == 7) seven = true;
if (a%10 == 9) nine = true;
a /= 10;
}
return seven && nine;
}
根本问题是你的条件不对 例如,
i%100==7
不测试i
的“十”位是否为7
。它实际上测试最后两位数字是否为07
。算算
要在单个表达式中测试“十”位数是7
,需要使用
(i / 10) % 10 == 7
(你应该能够从上面找到一个正确的解决方案。你至少可以采取两种不同的方法。)根本问题是你的条件是错误的 例如,
i%100==7
不测试i
的“十”位是否为7
。它实际上测试最后两位数字是否为07
。算算
要在单个表达式中测试“十”位数是7
,需要使用
(i / 10) % 10 == 7
(你应该能够从上面找到一个正确的解决方案。你至少可以采取两种不同的方法。)
if(cond1){if(cond2){…}
基本上是if(cond1&&cond2){…}
-如果两个条件都不能为真,那总是假的。但这两个条件都必须为真!拿100块。循环使用这两个条件表示前面的任何数字必须同时有7和9,对吗?我们有79和97。但是,它返回0,而不是2。为什么不使用String current=String.valueOf(i)代码>和条件if(current.contains(“7”)&¤t.contains(“9”)
来简化逻辑并使其可读?我不允许这样做。if(cond1){if(cond2){…}
基本上是if(cond1&&cond2){…}
-如果这两个条件都不能成立,这总是错误的。但这两个条件都必须是正确的!拿100块。循环使用这两个条件表示前面的任何数字必须同时有7和9,对吗?我们有79和97。但是,它返回0,而不是2。为什么不使用String current=String.valueOf(i)代码>和条件if(current.contains(“7”)和¤t.contains(“9”)
以简化逻辑并使其可读?嗯,我不允许。一些事情。第三行中的一,你是指int ii=1;?其次,我仍然在运行所有0。我相信你的代码正在检查同一个数字是否同时是7和9,嗯。第一:否。第二:我不知道“我仍然在运行所有0”是什么意思。你相信错了。啊,我明白我的错误了。非常感谢。有几件事。第三行中的一,你是指int ii=1;?第二,我仍然在跑步