程序仅打印出倒数第二个字母。想要整个词倒退

时间:2018-11-14 06:01:15

标签: java substring

import java.util.Scanner;
public class Project2 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String word;
        String c;
        int x, count, count1;
        System.out.println("Please enter a word:");
        word=in.nextLine();
        x=word.length();
        for(count=0;count<x;count++) {
            count1=x;
            count1--;
            c=word.substring((count1)-1,count1);
            System.out.println(c);
        }
    }
}

该程序所做的全部工作是打印出用户输入的单词的倒数第二个字符。我对为什么这样做感到困惑,并想知道如何向后打印整个单词。请有人帮忙。

6 个答案:

答案 0 :(得分:2)

您不需要循环来反转字符串。

Ref-StringBuilder#reverse

Scanner in = new Scanner(System.in);
System.out.println(new StringBuilder(in.nextLine()).reverse());

如果要反向打印字符,请忘记子字符串。

String word = in.nextLine();
int x = word.length();
for(count = x - 1; count >= 0; count--) {
    System.out.println(word.charAt(count));
}

答案 1 :(得分:1)

count1=x;分配带出循环。还要在打印字母后加上count--;

答案 2 :(得分:1)

您是正确的,直到SELECT COUNT(1) FROM `bigquery-public-data.bitcoin_blockchain.transactions`, UNNEST(outputs) AS o WHERE o.output_pubkey_base58 = '3D2oetdNuZUqQHPJmcMDDHYoqkyNVsFk9r' 。它是从倒数第二个字符开始打印,因为您一直将count1的值设置为x = word.length()的长度,并减去了1。因此,它始终引用倒数第二个字符。要解决此问题,请执行以下操作:

word

答案 3 :(得分:1)

如果您想通过遍历以困难的方式进行操作,请进行以下更改。

    +----+-------+---------------------+---------------------+---------------------+----------------------+-------------+
    | EQ | State |      EQ_inTIME      |     EQ_outTIME      |     LOAD_inTIME     |     LOAD_outTIME     | GapDuration |
    +----+-------+---------------------+---------------------+---------------------+----------------------+-------------+
    | A1 | UP    | 2018-11-13 08:00:00 | 2018-11-13 10:00:00 | 2018-11-13 08:20:00 |  2018-11-13 09:43:00 |          20 |
    | A1 | UP    | 2018-11-13 08:00:00 | 2018-11-13 10:00:00 | 2018-11-13 08:22:30 |  2018-11-13 09:55:00 |           0 |
    | A1 | UP    | 2018-11-13 08:00:00 | 2018-11-13 10:00:00 | 2018-11-13 08:30:00 |  2018-11-13 10:11:00 |           0 |
    | A1 | DOWN  | 2018-11-13 10:00:00 | 2018-11-13 10:35:00 | 2018-11-13 08:30:00 |  2018-11-13 10:11:00 |           0 |
    | A1 | UP    | 2018-11-13 10:35:00 | 2018-11-13 15:11:00 | 2018-11-13 11:00:00 |  2018-11-13 11:51:00 |          25 |
    | A1 | UP    | 2018-11-13 10:35:00 | 2018-11-13 15:11:00 | 2018-11-13 11:25:00 |  2018-11-13 11:55:00 |           0 |
    | A1 | UP    | 2018-11-13 10:35:00 | 2018-11-13 15:11:00 | 2018-11-13 12:05:00 | *2018-11-13 14:11:00 |          10 |
    | A1 | UP    | 2018-11-13 10:35:00 | 2018-11-13 15:11:00 | 2018-11-13 12:25:00 |  2018-11-13 13:05:00 |           0 |
    | A1 | UP    | 2018-11-13 10:35:00 | 2018-11-13 15:11:00 | 2018-11-13 13:45:00 |  2018-11-13 15:11:00 |          40 |
    | A2 | UP    | 2018-11-13 08:00:00 | 2018-11-13 14:05:00 | 2018-11-13 08:00:00 |  2018-11-13 14:05:00 |           0 |
    +----+-------+---------------------+---------------------+---------------------+----------------------+-------------+

更新:您可以使用for(count=x;count>=0;count--) { System.out.println(word.substring(count - 1,count)); } 轻松地将角色移到某个位置。

charAt#String

答案 4 :(得分:1)

每次循环运行时,您都将count1值重置为x(count1 = x)。因此c将始终是相同的值。 为此,请尝试将count1 = x移出循环,以便每次循环运行时,count1值都会按预期减少,并提供所需的子字符串。

答案 5 :(得分:1)

进入循环for(count=0;count<x;count++) 每个循环您都​​做相同的事情

count1=x;
count1--;
c=word.substring((count1)-1,count1);
System.out.println(c);

此块与循环无关!

这就是为什么您倒数第二个字符!

要解决此问题:

解决方案1 ​​:(只需反转字符串)

word=in.nextLine();
System.out.println(new StringBuilder(word).reverse());

或解决方案2 :(使用代码循环)

x=word.length();
for(count= x-1; count >= 0; count--) {
    c = word.substring((count)-1, count);
    System.out.print(c);
}