在do while loop-Java中退出程序而不显示其他消息

在do while loop-Java中退出程序而不显示其他消息,java,Java,我的代码按照它应该做的工作 do { System.out.print("Type a number (or -1 to stop): "); num = console.nextInt(); if(num == -1) break; if (num < min){ min = num; } if(num > max){ max = n

我的代码按照它应该做的工作

do {
    System.out.print("Type a number (or -1 to stop): ");
    
    num = console.nextInt();
    if(num == -1)  
        break;
    
    if (num < min){
        min = num;
    }
    
    if(num > max){
        max = num;
    }
    
} while (true);
System.out.println("Maximum was " + max);
System.out.println("Minimum was " + min);
何时应该:

Type a number (or -1 to stop): -1

我不知道如何在每个循环中不打印最大值和最小值,从而使代码不适合一般使用。

您需要保留一个计数器才能知道,至少给出了一个有效输入

int counter = 0;
do {
    System.out.print("Type a number (or -1 to stop): ");
    
    num = console.nextInt();
    if(num == -1)  
        break;
    
    if (num < min){
        min = num;
    }
    
    if(num > max){
        max = num;
    }
    counter++;
} while (true);
 if (counter != 0) {
   System.out.println("Maximum was " + max);
   System.out.println("Minimum was " + min);
 }
int计数器=0;
做{
系统输出打印(“键入一个数字(或-1停止):”;
num=console.nextInt();
如果(num==-1)
打破
if(num最大值){
max=num;
}
计数器++;
}虽然(正确);
如果(计数器!=0){
System.out.println(“最大值为”+max);
System.out.println(“最小值为”+min);
}
如果计数器保持为0,则在结束循环后,您知道没有提供有效的输入,因此您不打印最大值、最小值(根据对现有代码的更改),最简单的方法就是将
System.out.println
语句包装在条件中:

if (max >= min) {
  System.out.println("Maximum was " + max);
  System.out.println("Minimum was " + min);
}
这是因为该条件只有在循环体已完全执行(至少一次)时才为真

其他条件可包括:

  • 如果(max!=Integer.MIN_值)
    (或任何您将其初始化为的值)
  • if(min!=Integer.MAX_值)
    (初始化同上)
  • if(min!=Integer.MAX\u值和&MAX!=Integer.min\u值)
  • 当您输入一个非-1的值时,在循环中设置的布尔标志

还有很多其他的。但我认为,检查
max>=min
是最简单的方法。

只需为打印条件添加一个if:

if (min!=-2147483648 && max!=2147483647) {
    System.out.println("Maximum was " + max);
    System.out.println("Minimum was " + min);
}

这不是正确的方法,但它是最快的,我认为有很多可能的解决方案,创建一个布尔
enteredSomeNumber
,在循环中设置,添加一些
numValue
,然后进行检查,等等。您基本上需要一些变量来跟踪您不想输出的数据,然后在该变量上使用
if
。在循环内部,首先检查-1,然后
将其从循环中断开。您应该解释为什么这会解决问题,而不仅仅是转储代码。这是一个公认的迂腐错误,但如果用户输入2^32个数字的倍数,这将无法正常工作:
计数器可能会溢出回零。您实际上不需要计数:只要在当前递增的
计数器处设置一个布尔值为true,然后返回您的评论很好,让我很好奇。所以我搜索了一下。似乎在2^32-1输入之后,计数器将变为负-2147483648。因此,我们实际上需要大约2^64个输入才能再次达到0。计数器将在2^31-1个输入(
Integer.MAX\u VALUE
-因为
int
是有符号的)后溢出,并将变为-2^31(
Integer.MAX\u VALUE
)。包括-2^31和2^31-1之间有2^32个数字,毕竟,
int
有32位。即使它是2^32-1和-2^32,在溢出之前仍然只有2^33个输入,而不是2^64。是的,我的错,所以它大约是2^31个输入,直到我们面对-2147483648。然后再输入大约2^31,直到我们面对0。所以2^31+2^31=2*2^31=2^32。我犯了一个错误,在这种情况下,一些OP会在稍后阅读代码,并尝试对If子句的整个思想和推理进行反向工程
if (min!=-2147483648 && max!=2147483647) {
    System.out.println("Maximum was " + max);
    System.out.println("Minimum was " + min);
}