从较短的字符串打印字符后,程序停止从两个字符串一次打印一个字符

Posted

技术标签:

【中文标题】从较短的字符串打印字符后,程序停止从两个字符串一次打印一个字符【英文标题】:Program stops printing one character at a time from two strings after the Characters are printed from the shorter string 【发布时间】:2017-06-25 07:31:01 【问题描述】:

我对这段代码有疑问。否则它会完全按照标题所说的那样做,但是如果给定的字符串是“aa”和“bbbb”,它只会打印“abab”而不是应该打印“abbabbb”。从较短的字符串打印字符后,程序似乎停止了。代码如下:

public static void main(String[] args) 
    Scanner lukija = new Scanner(System.in);
    System.out.print("Anna merkkijono: ");
    String merkkijono1 = lukija.nextLine();
    System.out.println("Anna toinen merkkijono: ");
    String merkkijono2 = lukija.nextLine();
    for (int index = 0; index < merkkijono1.length() || index < merkkijono2.length(); index++) 
        if (merkkijono1.length() > index) 
            System.out.print(merkkijono1.charAt(index));
            if (merkkijono2.length() > index) 
                System.out.print(merkkijono2.charAt(index));
            
        
    

所以即使字符是从较短的字符串打印出来的,我也应该让它继续,有什么提示吗?

由于某种原因,其中一个括号不适合代码文本,我无法包含 java.util.Scanner 和公共类,而不会将整个代码文本变成一团糟,对此感到抱歉。

【问题讨论】:

不需要嵌套两个if 语句。取消嵌套它们,它应该可以解决您的问题。 【参考方案1】:

将第二个 if 语句移出第一个。

for (int index = 0; index < merkkijono1.length() || index < merkkijono2.length(); index++) 
    if (merkkijono1.length() > index) 
        System.out.print(merkkijono1.charAt(index));
    
    if (merkkijono2.length() > index) 
        System.out.print(merkkijono2.charAt(index));
    

【讨论】:

【参考方案2】:

似乎 if 语句在错误的循环中。 在这里,我对其进行了测试,并且可以正常工作。

import java.util.Scanner;

public class Program1 

    public static void main(String[] args) 
        Scanner lukija = new Scanner(System.in);

        System.out.print("Anna merkkijono: ");

        String merkkijono1 = lukija.nextLine();

        System.out.print("Anna toinen merkkijono: ");

        String merkkijono2 = lukija.nextLine();

        for (int i = 0; i < merkkijono1.length() || i < merkkijono2.length(); i++) 

            if (merkkijono1.length() > i) 
                System.out.print(merkkijono1.charAt(i));

            
            if (merkkijono2.length() > i) 
                System.out.print(merkkijono2.charAt(i));
            
        
    


【讨论】:

以上是关于从较短的字符串打印字符后,程序停止从两个字符串一次打印一个字符的主要内容,如果未能解决你的问题,请参考以下文章

从两个字符串中找出最大公共子字符串

使用较短的字符串更新字段

最长公共子序列针对小字符集的算法

最长公共子序列针对小字符集的算法

局部常数太多。使用较短的程序错误

perl中的' b'字符如何工作?