在C或Java中同时为true和false的条件

时间:2010-11-26 19:24:38

标签: java c if-statement

  

可能重复:
  What's the “condition” in C interview question?

可以这样做吗?

代码:

if(condition) {
    printf("Hello")
} else {
    printf("World");
}

结果: Hello World

应该使用条件来实现这一目标吗?

请帮忙。提前谢谢。

10 个答案:

答案 0 :(得分:7)

没有

如果else没有,if语句将执行。

答案 1 :(得分:7)

您可以作弊以在C:

中获得此结果
#include <stdio.h>
#define else printf(" ");

int main()
{
    int condition = 1;
    if(condition) { 
        printf("Hello");
    } 
    else { 
        printf("World");
    }
}

输出:

Hello World

答案 2 :(得分:3)

我想到的唯一想法是

if (printf("Hello") > 0)
  printf("");
else
  printf(" world");

但它不是一回事,你不能执行if / else的两个分支:选择其中一个分支。

答案 3 :(得分:2)

教师希望您填写fork()作为条件。这不是通用的C代码,而是Unix / POSIX代码,通过将进程拆分为父进程和子进程来工作。 fork返回父进程中的子进程ID(非零数字,因此 true ),并返回子进程中的0( false )。

如果您可以在其他地方添加代码,另一种解决问题的可能方法是将setjmp(jmp_buf)写为条件,并在条件之后添加longjmp(jmp_buf, 1);。然而,这似乎打破了问题的规则。

答案 4 :(得分:1)

如果/ elses是/ ors。要么执行if部分,要么执行else,但不要同时执行。

答案 5 :(得分:1)

不,声明是if ... else,而不是if ... and then also maybe。条件评估一次,并选择分支。

答案 6 :(得分:0)

一般来说,不,这是不可能的。 if / else被转换为Java字节码的方式(在任何一种情况下,转换为机器代码),一个进程将只运行语句的两个分支之一。如果我们没有if / else,我们最终会使用goto来合成它,这看起来很像这样:

  if (condition) goto if_block;

else_block:
  printf("World");
  goto after_ifelse;

if_block:
  printf("Hello");

after_ifelse:

正如您所看到的,如果条件为真(即使它可能在某种程度上也是假的!),该过程将遵循'if'分支并跳过其他。没有办法在一个过程中解决这个问题;任何方式都需要更改程序的代码,或破坏的硬件(特别是RAM或CPU),或足够的辐射来杀死你。我所知道的每个编译器和环境都以这种方式对待if/else,尽管在else(并且反转条件)之后有if个案例是很常见的,这使得(非常有效)假设任何不为真的布尔条件都为假。

现在有了所说的......在C中,这是半可能的,但不是你想的那样 - 而不是每个操作系统。在* nix系统上,有一个通常称为fork()的系统调用,它允许一个进程变为两个进程(从而避免“一个进程将只运行一个分支”限制)。

if (fork())
    printf("Hello");
else
    printf("World");

但是(1)这段代码有一个固有的竞争条件 - 现在两个分支都设置为运行,但任何一个分支都可以在另一个分支之前运行。您需要{child}进程中的wait。并且(2)这不是一个“条件”,它是一个函数调用。如果您不允许添加代码,那么这不应该作为答案。

或者你可以做一些邪恶的宏观内容来将else完全翻译成其他内容。但是之后阅读你的代码的人会想要找你并没收你的键盘,那就好了。

答案 7 :(得分:0)

两种语言中的布尔类型变量允许你想要做什么。重点是它们必须是一个或另一个。

要完成您想要的任务,您可能需要自定义类型。

//This type allows for quantum weirdness
public class NotABool{

    public boolean isTrue = false;
    public boolean isFalse = false;

    //Funky setMethod
    void set(boolean value){
       //...
    }
}
NotABool nab = new NotABool();

if (NotABool.isTrue){
   //Print "Hello"
}
if (NotABool.isFalse){
   //Print "World"
}

你能澄清一下你想要完成的事情吗?

答案 8 :(得分:0)

它疯了,但是:

int test = 0;
String s = "";

switch (test) {
    case 0: s += "Hello";
    default: s += "World";
}

System.out.println(s);

答案 9 :(得分:0)

您描述的功能看起来更像switch结构。

在Java中,您只能切换intenum类型,但在C中,您可以切换字符串以及int类型。

看起来像这样:

int i = 0;

switch (i) {
    case 0:
         System.out.print("Hello ");
    case 1:
         System.out.print("World!");
         break;
  }

结果输出为“Hello World!”

i0时,它与第一种情况匹配并执行代码,直到找到下一个break;语句。如果i1,则只打印出“世界!”。