执行此操作后会发生什么(窗帘后面)?
int x = 7;
x = x++;
Run Code Online (Sandbox Code Playgroud)
也就是说,当一个变量后期递增并在一个语句中赋值给自己时?我编译并执行了这个.在整个声明之后x仍然是7 .在我的书中,它说增加了!x
可能重复:
为什么会进入无限循环?
类似于i = i++C和C++中的未定义行为,因为标量对象的值在同一表达式中更改两次而没有插入序列点.
但是我认为这些表达式在C#或Java中具有明确定义的行为,因为AFAIK对参数的评估从左到右,并且全部都有序列点.
那就是说,我希望i = i++相当于i++.但事实并非如此.以下程序输出0.
using System;
class Program
{
static void Main(string[] args)
{
int i = 0;
i = i++;
Console.WriteLine(i);
}
}
Run Code Online (Sandbox Code Playgroud)
你能帮我理解为什么吗?
免责声明: 我完全清楚,无论是否定义了上述结构的行为,它们都是愚蠢,无用,不可读,不必要的,不应在代码中使用.我只是好奇.
考虑这个简单的代码:
// E1
public void doTest(String pattern) {
int counter = 0;
while (counter < 3) {
counter = counter++;
}
System.out.println("Done");
}
Run Code Online (Sandbox Code Playgroud)
这会导致无限循环.
但是,如果增加计数器的语句是这样写的:
E2. counter = ++counter;
Run Code Online (Sandbox Code Playgroud)
或这个
E3. counter++;
Run Code Online (Sandbox Code Playgroud)
它正常终止.我理解增量发生在失败的版本中的赋值之后,这解释了为什么E2工作,但我认为java分配了变量的增量结果,如E3中那样递增.所以我很困惑为什么E1失败但E3没有.
我有一个简单的c#控制台应用程序,但我输错了为什么?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication11
{
class Program
{
static void Main(string[] args)
{
int i = 100;
for (int n = 0; n < 100; n++)
{
i = i++;
}
Console.WriteLine(i);
}
}
}
Run Code Online (Sandbox Code Playgroud) class T {
public static void main(String args[]) {
int x = 0;
x = x++;
System.out.println(x);
}
}
Run Code Online (Sandbox Code Playgroud) 我知道数组运算符具有优先权.然后是二元关节运算符*,/,%.然后+和 - 它们优先级低.
但我很困惑,在这个例子中,java将首先解决哪个问题.如果我们有2个运算符具有相同的优先级,那么首先在java中使用哪个运算符?
谢谢.
int x = y = -2 + 5 * 7 - 7 / 2 % 5;
Run Code Online (Sandbox Code Playgroud)
如果有人能为我解决这个问题,请逐一向我解释.因为这总是让我对考试感到困惑.
对于大多数人来说,这是一个愚蠢的问题 - 我知道 - 但我是这里的初学者之一,我无法理解为什么这里的输出是12(x--这对于结果做了什么)?
int x, y;
x = 7;
x-- ;
y = x * 2;
x = 3;
Run Code Online (Sandbox Code Playgroud) 可能重复:
为什么这会进入无限循环?
public class loop
{
public static void main(String[] args)
{
int k=0;
for (int i = 0; i < 6; i++)
{
k = k++;
System.out.println(k);
}
}
}
Run Code Online (Sandbox Code Playgroud)
出局:
0
0
0
0
0
0
Run Code Online (Sandbox Code Playgroud)
你能解释一下为什么上面产生的零甚至是递增k值并将其赋值给k.
我需要在一些字符串中计算字母和空格.输出是我的字符串
我试过这个:
for (int i = 0; i < output.length(); i++) {
if (output.charAt(i) != ' ') {
letters = letters++;
} //counting spaces
else {
spaces = spaces++;
}
Run Code Online (Sandbox Code Playgroud)
它不起作用.我得到0个字母和0个空格.我想我需要一些代码'',对吧?
这是我无法理解的行为.
class loop1 {
public static void main(String args[]) {
int i = 10;
do
while(i++ < 15) {
System.out.println(i);
i = i + 20;
System.out.println(i);
}
while(i<2);
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
我希望它能打印出来
11
31
31
Run Code Online (Sandbox Code Playgroud)
但它打印
11
31
32
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么这个"32"出现在输出中.
这是我对流程的理解
有人能告诉我我错过了什么吗?
为什么我的程序跳过while循环?
class DigitRepeat
{
public static void main(String args[])
{
int n=133,dig=3,digit,count=0;
while(n!=0)
{
digit=n%10;
if(dig==digit)
{
count=count++;
}
n=n/10;
}
if(count==0)
System.out.println("digit not found");
else
System.out.println("digit occurs "+count+" times.");
}
}
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
public class Game {
public static void main(String[] args) {
int x = 0;
while (x < 1) {
x = x++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用我的编译器,这段代码进入无限循环,但为什么呢?
首先,我们把价值x成x,而只有那么我们就加1 x,之后我会想到1 < 1会是假的,while循环将终止...
但不,那不会发生.
那么无限循环可能是什么原因呢?