Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 交换字符串中的数字_Java - Fatal编程技术网

Java 交换字符串中的数字

Java 交换字符串中的数字,java,Java,我有下面的程序 public class swapping { public static void main(String[] args) { String num = "31254"; int max = Integer.MIN_VALUE, maxIndex = 0; for (int i = 0; i < num.length(); i++) { if (num.charAt(i) > max

我有下面的程序

public class swapping {

    public static void main(String[] args) {
        String num = "31254";

        int max = Integer.MIN_VALUE, maxIndex = 0;
        for (int i = 0; i < num.length(); i++) {
            if (num.charAt(i) > max) {
                max = num.charAt(i);
                maxIndex = i;
            }
        }
        swap(num, num.charAt(0), maxIndex);
    }

    private static void swap(String num, char charAt, int maxIndex) {
         System.out.println("number is " + num + " Initial char is " + charAt
                    + " Maximum is " + maxIndex);
            char t = charAt;
            char s = num.charAt(maxIndex);
            System.out.println("numbers:" + t + " " + s);
            char temp = t;
            t = s;
            s = temp;
            System.out.println("Final string after swap is " + num);
    }

}
String num = "31254";

    int maxIndex = 0;
    char maxString = num.charAt(0);
    for (int i = 1; i < num.length(); i++) {
        if (num.charAt(i) > maxString) {
            maxString = num.charAt(i);
            maxIndex = i;
        }
    }
    System.out.println(maxString);
    System.out.println(maxIndex);

    String str1 = num.substring(1,maxIndex);
    String str2 = num.substring(maxIndex+1,num.length());
    String str3 = num.charAt(maxIndex)+str1+num.charAt(0)+str2;
    System.out.println(str3);
在这里,交换没有完成,前面的数字正在打印。请让我知道如何打印所需的输出


谢谢

请注意您传递给方法的内容

在第一个和最大位置传递实际字符:在本例中为3和5

但是,在打印它们之后,您可以调用:

    char t = num.charAt(initial);
    char s = num.charAt(max);
charAt需要字符串中字符的索引。索引应该是一个整数,但您要将字符值传递给它,即字符3和字符5

现在,在Java中,字符被认为是介于0和65535之间的数字——字符的unicode值。因此,它允许您在本应传递整数的位置传递字符。unicode值3是51,5是53。所以你实际上是在告诉它,给我字符串num中的字符,它在51位

这不是你想要的

与其这样做,不如让方法接受第一个字符的索引和最大字符的索引。然后,使用charAt将是正确的。但请注意,在开始打印时也要使用字符

private static void swap(String num, int initialIndex, int maxIndex) {
    ...
}
另一个问题是,您实际上没有交换字符串中的字符

您所做的是交换包含两个字符t和s的变量。现在t包含s包含的,s包含t包含的

但是,这与原始字符串num无关。您没有对字符串本身做任何操作

需要记住的一点是,在Java中,不能更改字符串。它是不变的。如果您有一个string对象,Java不会给您任何方法来更改其中的内容。它只允许你阅读部分内容,不允许你写作

您可以做的是为num分配一个新字符串值。在这个新字符串中,您将把max字符的值放在0位置,把第一个位置的值放在max字符位置。你会把其他所有的角色复制到原来的位置

因此,您需要创建一个临时字符串,逐个字符循环原始字符串,并在每个位置,询问您自己在这一轮中我应该向新字符串添加什么字符?。然后用+运算符将该字符添加到字符串中

最后,将新的临时字符串分配给num


注意:在Java中有更有效的方法来实现这一点,比如使用StringBuffer或StringBuilder,但我得到的印象是,您对Java的研究还不够深入。

请注意您传递给该方法的内容

在第一个和最大位置传递实际字符:在本例中为3和5

但是,在打印它们之后,您可以调用:

    char t = num.charAt(initial);
    char s = num.charAt(max);
charAt需要字符串中字符的索引。索引应该是一个整数,但您要将字符值传递给它,即字符3和字符5

现在,在Java中,字符被认为是介于0和65535之间的数字——字符的unicode值。因此,它允许您在本应传递整数的位置传递字符。unicode值3是51,5是53。所以你实际上是在告诉它,给我字符串num中的字符,它在51位

这不是你想要的

与其这样做,不如让方法接受第一个字符的索引和最大字符的索引。然后,使用charAt将是正确的。但请注意,在开始打印时也要使用字符

private static void swap(String num, int initialIndex, int maxIndex) {
    ...
}
另一个问题是,您实际上没有交换字符串中的字符

您所做的是交换包含两个字符t和s的变量。现在t包含s包含的,s包含t包含的

但是,这与原始字符串num无关。您没有对字符串本身做任何操作

需要记住的一点是,在Java中,不能更改字符串。它是不变的。如果您有一个string对象,Java不会给您任何方法来更改其中的内容。它只允许你阅读部分内容,不允许你写作

您可以做的是为num分配一个新字符串值。在这个新字符串中,您将把max字符的值放在0位置,把第一个位置的值放在max字符位置。你会把其他所有的角色复制到原来的位置

因此,您需要创建一个临时字符串,逐个字符循环原始字符串,并在每个位置,询问您自己在这一轮中我应该向新字符串添加什么字符?。然后用+运算符将该字符添加到字符串中

最后,将新的临时字符串分配给num

注意:在Java中有更有效的方法来实现这一点,比如使用StringBuffer或StringBuilder,但我得到的印象是,您对Java的研究还不够深入。

Initial是一个字符。查拉 t使用整数,因此字符将转换为3的acii代码,其中3是51。所以你的行等于'num.charAt51,这超出了范围

因此,您必须将mathod的签名更改为private static void swapString num,int initial,int max

initial是一个字符。字符使用整数,因此字符将转换为3的acii代码,其中3是51。所以你的行等于'num.charAt51,这超出了范围

因此,您必须将mathod的签名更改为private static void swapString num,int initial,int max

尝试下面的程序

public class swapping {

    public static void main(String[] args) {
        String num = "31254";

        int max = Integer.MIN_VALUE, maxIndex = 0;
        for (int i = 0; i < num.length(); i++) {
            if (num.charAt(i) > max) {
                max = num.charAt(i);
                maxIndex = i;
            }
        }
        swap(num, num.charAt(0), maxIndex);
    }

    private static void swap(String num, char charAt, int maxIndex) {
         System.out.println("number is " + num + " Initial char is " + charAt
                    + " Maximum is " + maxIndex);
            char t = charAt;
            char s = num.charAt(maxIndex);
            System.out.println("numbers:" + t + " " + s);
            char temp = t;
            t = s;
            s = temp;
            System.out.println("Final string after swap is " + num);
    }

}
String num = "31254";

    int maxIndex = 0;
    char maxString = num.charAt(0);
    for (int i = 1; i < num.length(); i++) {
        if (num.charAt(i) > maxString) {
            maxString = num.charAt(i);
            maxIndex = i;
        }
    }
    System.out.println(maxString);
    System.out.println(maxIndex);

    String str1 = num.substring(1,maxIndex);
    String str2 = num.substring(maxIndex+1,num.length());
    String str3 = num.charAt(maxIndex)+str1+num.charAt(0)+str2;
    System.out.println(str3);
试试下面的程序

public class swapping {

    public static void main(String[] args) {
        String num = "31254";

        int max = Integer.MIN_VALUE, maxIndex = 0;
        for (int i = 0; i < num.length(); i++) {
            if (num.charAt(i) > max) {
                max = num.charAt(i);
                maxIndex = i;
            }
        }
        swap(num, num.charAt(0), maxIndex);
    }

    private static void swap(String num, char charAt, int maxIndex) {
         System.out.println("number is " + num + " Initial char is " + charAt
                    + " Maximum is " + maxIndex);
            char t = charAt;
            char s = num.charAt(maxIndex);
            System.out.println("numbers:" + t + " " + s);
            char temp = t;
            t = s;
            s = temp;
            System.out.println("Final string after swap is " + num);
    }

}
String num = "31254";

    int maxIndex = 0;
    char maxString = num.charAt(0);
    for (int i = 1; i < num.length(); i++) {
        if (num.charAt(i) > maxString) {
            maxString = num.charAt(i);
            maxIndex = i;
        }
    }
    System.out.println(maxString);
    System.out.println(maxIndex);

    String str1 = num.substring(1,maxIndex);
    String str2 = num.substring(maxIndex+1,num.length());
    String str3 = num.charAt(maxIndex)+str1+num.charAt(0)+str2;
    System.out.println(str3);

下面是我将如何在3行中完成它。请注意,对于数字,每个字符为1字节

byte[] array = number.getBytes();
Arrays.sort(array);
number = number.replaceFirst("(.)(.*?)(" + (array[array.length - 1] - '0') + ")", "$3$2$1");
这段代码不仅非常简洁-使用regex在一条语句中执行交换-它还自动处理最大数字位于开头的边缘情况,在这种情况下,不会进行匹配/替换

下面是一些测试代码:

String number = "31254";
byte[] array = number.getBytes();
Arrays.sort(array);
number = number.replaceFirst("(.)(.*?)(" + (array[array.length - 1] - '0') + ")", "$3$2$1");
System.out.println(number);
输出:

51234

下面是我将如何在3行中完成它。请注意,对于数字,每个字符为1字节

byte[] array = number.getBytes();
Arrays.sort(array);
number = number.replaceFirst("(.)(.*?)(" + (array[array.length - 1] - '0') + ")", "$3$2$1");
这段代码不仅非常简洁-使用regex在一条语句中执行交换-它还自动处理最大数字位于开头的边缘情况,在这种情况下,不会进行匹配/替换

下面是一些测试代码:

String number = "31254";
byte[] array = number.getBytes();
Arrays.sort(array);
number = number.replaceFirst("(.)(.*?)(" + (array[array.length - 1] - '0') + ")", "$3$2$1");
System.out.println(number);
输出:

51234

charAt使用基于0的索引,因此charAt5是字符串的oops。还要注意,此charAt注定会失败,字符串19,max=9..Hi@RC,根据您的评论,我已经更新了代码,但在这里我仍然无法交换,它打印的是相同的旧数字。是我转换它并使用arrayscharAt的另一种方法,使用基于0的索引,因此charAt5是字符串的oops。还要注意,这个字符注定会失败,字符串19,max=9..Hi@RC,根据您的评论,我已经更新了代码,但在这里我仍然无法交换,它打印的是相同的旧数字。是我转换它并使用arraysHi的另一种方式,感谢您的快速回复,我已经根据上述内容更改了代码,但问题是我无法交换它,它仍然打印旧的数字。注意:这是因为您没有修改num。您需要类似于:temp=num.charAt0;num.charAt0=num.charAtmaxInt;num.charAtmaxInt=温度;好的,我在回复中添加了第二部分。您好,感谢您的快速回复,我已经根据上述内容更改了代码,但问题是我无法交换代码,它仍然打印旧的数字。注意:这是因为您没有修改num。您需要类似的内容:temp=num.charAt0;num.charAt0=num.charAtmaxInt;num.charAtmaxInt=温度;好的,我在答复中增加了第二部分。