0

キーボードから入力された数値文字列を読み取る Java プログラムを作成しようとしていますが、

最長の昇順の部分文字列を提供します。

以下は私のコードです:

import java.util.Scanner;
public class Ascending{
public static void main(String args[]){

Scanner in = new Scanner(System.in);

System.out.print("Enter a number = ");
String n = in.nextLine(); 
int length = n.length(); 


for(int i = 0; i < length; i++) {

    char first = n.charAt(i);       
    char next = n.charAt(i+1);      
    char last = n.charAt(length-1);     
    int f = (int)(first - 48);      
    int nx = (int)(next - 48);      
    int l = (int)(last - 48);       

        if (f<nx) {


        String asc = n.substring(i, i++);   
        i++;
        System.out.println("output = " + asc);
            }

        else {
            String asc = n.substring(i, i++);
            System.out.println("output = " + asc);
            break;}

        }

    }
}

上記をコンパイルすると、

<Enter a number = 12 output = >

結果なし。

for ループ内で何か問題が発生したと想定していますが、どこで問題が発生したのか正確にはわかりません。

不要な変数を定義しすぎたのではないでしょうか?

4

1 に答える 1

0

ポストインクリメント演算子を使用していますが、それがどのように機能するかを実験したとは思いません。これを試して:

int i = 0;

System.out.println(i);
System.out.println(i++);
System.out.println(i);

あなたは得るでしょう

0
0
1

これは、post-increment ( ) が「この値をインクリメントしてから、インクリメントする前++の値を返す」と言っているためです。

だから頼むときは

n.substring(i, i++);

長さ 0 の文字列を明示的に要求しています (なぜならi == i++)。

プレインクリメント演算子 を使用できますが++i、code-golf 以外ではめったに使用されないため、人々を混乱させるだけです。IMO のベスト プラクティスは++、独自の行で使用し、戻り値を見ないようにすることです。

本当に、あなたがここで欲しいのは

n.substring(i, i+1);
于 2013-03-17T04:42:34.610 に答える