有两种代码,其中vscode会自动将x:放入系统中。出来println我的问题是x是什么:为什么vs代码会把它放在代码中--示例代码1-
import java.util.*;
public class cn_51_count_words {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
if (str.length() == 0) {
System.out.println(x:0);
} else {
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
count++;
}
}
System.out.println(count + 1);
sc.close();
}
}
}
示例代码2--
import java.util.*;
public class main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
for (int i = 0, j = str.length() - 1; i < str.length(); i++) {
if (str.charAt(i) != str.charAt(j)) {
return;
}
j--;
sc.close();
}
System.out.println(x:"pallindrome");
}
}
它是System.out
(类型为PrintStream
)上println
方法的参数名称:https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/io/PrintStream.html.
请注意,IDE并没有修改您的代码,只是向您显示有用的参数的名称(可能还有类型)。如果不想打开它,您可能可以将其关闭(不知道如何关闭,因为我不使用VS代码)。
您所指的x是所谓的参数提示或嵌入提示。它不存在于实际代码中,只存在于IDE的可视化中。
它告诉您参数的名称,以便您更容易阅读。示例:新点(x:5,y:7)
,而实际的源代码只是新点(x,y)
。
大多数现代IDE都有这样的功能。内置或插件。只需通过设置即可。
一些语言甚至引入命名参数来直接在语言中实现类似效果。例如,在Kotlin中,您可以编写点(x:5,y:7)。
虽然这些提示非常有用,但在实际设计代码时不应依赖它们。代码仍然经常在具有如此强大功能的IDE之外读取,例如在代码审查期间在GitHub上。在那里,您通常还没有可用的此类功能。
这是我的Intellij项目中一些随机代码的示例:
如果您有多个相同类型的参数,这一点尤其有用,因为顺序可能会混淆。例如,假设您设计了如下方法:
public static void scheduleEvery(
long initialDelay,
long subsequentDelay,
TimeUnit unit) {
...
}
因此,acutal源代码可能很难阅读,而且很容易混淆这两个长代码:
scheduleEvery(5, 2, TimeUnit.MINUTES);
但使用参数提示要容易得多:
尽管如此,有一种模式是一些人用来在实际的源代码中实现类似效果的。
而不是写作
scheduleEvery(5, 2, TimeUnit.MINUTES);
您可以创建具有名称的变量,并改用它们:
long initialDelay = 5;
long subsequentDelay = 2;
scheduleEvery(initialDelay, subsequentDelay, TimeUnit.MINUTES);
在可读性方面,这也达到了同样的效果。
如果代码的作者实际上已经混淆了变量的开头,那么它可能会遇到非常严重的bug。例如,如果他们写道:
long subsequentDelay = 5;
long initialDelay = 2;
scheduleEvery(subsequentDelay, initialDelay, TimeUnit.MINUTES);
很难注意到这个微妙的错误。参数提示可以再次拯救你,显示:
参数提示派上用场的另一个值得注意的情况是所谓的布尔陷阱。它描述了一个设计缺陷,其中创建了一个将布尔值作为参数的方法。例如:
public static String createRandomText(boolean withEvenLength) {
...
}
对于调用此方法的读者来说,布尔值的含义完全不明显:
String text = createRandomText(true);
更好的提示:
替代方案包括再次创建变量:
boolean withEvenLength = true;
String text = createRandomText(withEvenLength);
或者,如果可能,完全重新设计方法,而是采用枚举:
enum StringLength {
EVEN,
ODD
}
public static String createRandomText(StringLength length) {
...
}
使用现在可读的调用站点:
String text = createRandomText(StringLength.EVEN);
这里的。class是什么,它指定了什么?c和a不同吗?
问题内容: 执行此操作后(幕后)会发生什么? 也就是说,当变量在一个语句中后增加并分配给它自己时?我编译并执行了这个。即使整个陈述之后仍然是7 。在我的书中,它说是递增的! 问题答案: 确实增加了。但是,你正在将 的旧值分配给它自己。 1.递增x并返回其旧值。 2. 将旧值分配回自己。 因此,最后将其分配回其初始值。
可能重复: 什么 我在一些java代码中遇到了一些不熟悉的符号,虽然代码编译和功能正确,但我对尖括号在代码中的确切作用感到困惑。我在com中找到了代码。太阳Java语言帮助搜索位缓冲区,其片段如下: 那些看起来神秘的括号是做什么的?它看起来几乎像c插入/提取,但我知道Java没有这样的东西。 此外,我还尝试在谷歌上搜索,但出于某种原因,谷歌似乎看不到尖括号,即使我把它们放在引号中。
我一直在谷歌搜索它,但谷歌搜索关键字“?”也没那么好。我很想知道它是做什么的,什么时候用。 谢了! 我已经看过几次了,但这里有一个我刚刚看到的例子
我正在使用Visual Studio Code来练习一些Java,虽然运行代码时没有什么问题,但我不确定为什么我在代码的某些部分一直得到“x:”和“a:”。 例如: 如您所见,在println中有x:,在simple\u int中有a:。我不知道这些是什么意思。 附件是一个屏幕截图