当前位置: 首页 > 知识库问答 >
问题:

java中的x是什么?[副本]

章昱
2023-03-14

有两种代码,其中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");
    }
}

共有2个答案

蒲坚
2023-03-14

它是System.out(类型为PrintStream)上println方法的参数名称:https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/io/PrintStream.html.

请注意,IDE并没有修改您的代码,只是向您显示有用的参数的名称(可能还有类型)。如果不想打开它,您可能可以将其关闭(不知道如何关闭,因为我不使用VS代码)。

臧梓
2023-03-14

您所指的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:。我不知道这些是什么意思。 附件是一个屏幕截图