该程序的目的是采用正整数,一旦命中了哨兵值(-1),程序将返回2个最低数字。我的程序有效,但在某些情况下它并不适用。例如,如果我输入10,15,20,-1,程序将导致10而不是10和15.这是我的程序:
public class Small{
public static void main(String [ ] args){
int number;
number=IO.readInt();
int lowest=number;
int lowest2=number;
while (number!=-1){
number=IO.readInt();
if(number>0){
if(number<lowest && number!=-1){
lowest=number;}
else{if((number<lowest2||!(number>=lowest2))&& number!=-1){
lowest2=number;}
}
}
}
IO.outputIntAnswer(lowest);
IO.outputIntAnswer(lowest2);
}
}
答案 0 :(得分:0)
您的代码的主要问题是您将最低和最低2设置为您输入的第一个值。如果您输入的所有其他数字都高于第一个数字,则它将永远无法找到任何更低的数字。
以您的示例为例,第一个数字是10,您指定为最低和最低2。输入15时,它不低于10,因此两个变量都不能重置。与20相同。
你的if语句中也有很多冗余的检查。
public class Small {
public static void main(String [ ] args) {
int number;
int lowest = Integer.MAX_VALUE;
int lowest2 = Integer.MAX_VALUE;
while (number!=-1) {
number=IO.readInt();
if (number > 0) {
if(number < lowest) {
lowest=number;
}
else if (number < lowest2) {
lowest2=number;
}
}
}
}
IO.outputIntAnswer(lowest);
IO.outputIntAnswer(lowest2);
}
答案 1 :(得分:0)
问题在于程序的逻辑流程。这是代码正在做的事情:
只需一个号码,即可存储在lowest
和lowest2
中。
通过循环阅读更多数字
2a上。如果数字为正数,请检查lowest
。
2A1。如果读入的值低于lowest
,请将lowest
的值更改为读入值。
2A2。否则,如果读入的值低于lowest2
,请将lowest2
的值更改为读入值。只有在lowest
未更改时才执行此操作。
2B。如果读入值为-1,则结束循环。
2c中。如果读入值为负值但不是-1,请继续,但不要将号码添加到lowest
或lowest2
。
打印lowest
和lowest2
的值。
如果您看到错误,请参阅2a2。这与while
循环之前的设置格式与您的格式相关联:您将lowest
和lowest2
设为第一个值。
这个代码通常会正常运行,除了一个实例:如果第一个值是您输入的最小正值,所有其他值都大于它,该怎么办?最低2将被设置为该值,并且您要检查是否有任何其他值小于它(它们不是,因为它们都会比它更大)。< / p>
您编码时的提示:
1)尝试培养逻辑思维心态。考虑如何为程序创建算法。确保您不会遇到程序无法按照您希望的方式运行的任何情况,例如在这种情况下(这称为逻辑错误)。
2)当您完成编码后,或在您运行并出现错误后,请手动运行您的程序。逐步执行代码的每一行,并尝试查看代码在何处以及为何不以您希望的方式工作。或者像其他程序员一样让别人看到。有时,即使是最好的眼睛也不会发现自己的错误。
修改强> 有多种方法可以解决这个特殊问题。一种方法是做Seeker和Rick所做的事: 1)将两个值都设置为最大可能的整数值,因此输入的所有值都将低于第一个值。 2)在循环开始之前询问前两个输入,并相互检查以设置前两个最低值。
但是,我相信当你做这样的事情时,有一些事情需要注意。当然,在编码之前应该概述这些内容。
1)如果用户只输入一个或零个有效值,该怎么办?搜索者的方法不起作用,除非他检查第一个/第二个值是负数/ -1。 Rick的方法不会起作用,因为最低/最低2值中的至少一个仍然是最大整数值。
2)如果在-1之前没有输入正值,该怎么办?这类似于数字1,您的ints
将为空。
您当然可以使用搜索者和Rick的算法,但如果您使用它们,则应检查这些条件。
答案 2 :(得分:-1)
import java.util.Scanner;
public class Small {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter Number");
int lowest = scanner.nextInt();
System.out.println("Enter Number");
int lowest2 = scanner.nextInt();
if (lowest > lowest2) {
int t = lowest;
lowest = lowest2;
lowest2 = t;
}
while (true) {
System.out.println("Enter Number");
int number = scanner.nextInt();
if (number == -1)
break;
if (number < lowest2 && number < lowest) {
lowest = number;
} else if (number < lowest2) {
lowest2 = number;
}
}
System.out.println("lowest:" + lowest);
System.out.println("lowest2:" + lowest2);
scanner.close();
}
}