2017-03-18 16 views
-1

私は入力用の文字を取り、各文字の数値を合計するプログラムを持っています。別のクラスから静的にブールメソッドを呼び出す

「abc」と入力すると、出力は「6」になります。

大文字は無視されるので、「abC」と入力すると出力は「3」になります。

私は現在、別のクラスにあります。メソッドをtrueに設定すると、私のメインプログラムはそのまま実行されますが、falseに設定されている場合、大文字は小文字として扱われ、 "abC"の入力、 "6"の出力を与える。

これは意味があると思いますが、私はいくつかのことを試しましたが、それらはすべて大文字を無視してそのまま実行します。

ここに私のコードですが、私は建設的なフィードバックを感謝します。

おかげ

EDIT:あなたは「いけない手助けしたくない場合は、質問をするために私をdownvoteていなかった場合、私はまた感謝、私は尋ねたすべての質問が明白なまたは公正のためにdownvotedますようです理由。私はこれが起こることを知って以来、援助を求めたくなかった。我々はどこかに出発しなければならない!

主な方法:

Scanner scan = new Scanner(System.in); 

    System.out.println("\nPlease enter the letters you would like to use:"); 

    String s, t = ""; 

    scan.next(); 

    s = scan.next(); 

    boolean b = Converter.caseSensitive(false, s); 

    scan.close(); 

    for (int i = 0; i < s.length(); i++) { 
     char ch = s.charAt(i); 

     if (!t.isEmpty()) { 
      t += ","; 
     } 


     if (ch >= 'a' && ch <= 'z') { 
      int n = ch - 'a' + 1; 
      t += String.valueOf(n); 
     } 
    } 

別のクラスの第二の方法:

public class Converter { 

public static boolean caseSensitive(Boolean b, String s) { 

    for (char c : s.toCharArray()) { 
     if (Character.isLetter(c) && Character.isLowerCase(c)) { 
      b = s.equalsIgnoreCase(s); 
      return false; 
     } 
    } 

    s = s.toLowerCase(); 
    return true; 
} 
} 
+0

であなたが不要なラインからあなたのコードを清めていただけますか? –

+1

main()からpass(booleanオプション)のような他の関数にすべてのコードを移動して置き換えないでください。 boolean b = StringConverter.caseSensitive(false、s); with ブール値b = StringConverter.caseSensitive(option、s);通話パス(true)。合格(偽);新しいメインから? –

+0

ここに実際に質問はありません。どこに問題があるのか​​を明確にしてください。 –

答えて

1

私はあなたの質問は、どのように私はクラスの静的なブール値を記録し、その後、別のからそれを要求しない」であると信じてクラス?"

public class Configuration { 
    private static boolean convertToUppercase = true; 

    public static void setConvertToUppercase(boolean convert) { 
     convertToUppercase = convert; 
    } 

    public static boolean getConvertToUppercase() { 
     return convertToUppercase; 
    } 
} 

これは、として使用することができます。ほとんどのプログラマーは(私を含め)この貧しい設計を検討したが、あなたの質問の範囲外である理由を説明するだろうと

注意。

あなたのコードには他にも多くの問題があります。例えば上のメソッド呼び出しでは、入力文字列は変更されません。しかし、私はあなたが立ち往生するときに関連するコードだけで別の質問をすることをお勧めします。

+0

私はあなたが正しいと信じています。アドバイスをありがとう、私は自分のコードがエレガントから遠いことを知っている、私は今のところ始まっている、今のところ、それがうまくいくなら私は幸せだ。私はどのように私はあなたの助けに感謝して取得するためにいくつかのアイデアを試してみます。 – Keeron

1

文字列はJavaでは不変です。

ABC

として "ABC" を持つために:上記のコードの出力となりますのでご注意ください String is immutable. What exactly is the meaning?

public static void main(String[] args) throws Exception 
{ 
    String test = "abc"; 
    toUpperCase(test); 
    System.out.println(test); 
} 

private static void toUpperCase(String test) 
{ 
    test = test.toUpperCase(); 
} 

:このトピックの詳細についてstackoverflowの質問次お読みください次のコードを使用する必要があります。

public static void main(String[] args) throws Exception 
{ 
    String test = "abc"; 
    test = toUpperCase(test); 
    System.out.println(test); 
} 

private static String toUpperCase(String test) 
{ 
    return test.toUpperCase(); 
} 

この1つの出力:

ABC

だからあなたConverter.caseSensitive方法は文字列を返す必要があります。

+0

フィードバックJCassoのおかげで、ちょうど私に試してみるアイデアを与えました。 – Keeron

1

私は本当にConverterクラスが必要と思わないです。あなたは、クラスを削除し、行を置き換えることができます。

boolean b = Converter.caseSensitive(false, s);

この

boolean shouldCountUppercaseLetters = false; 

if (shouldCountUppercaseLetters) { 
    s = s.toLowerCase(); 
} 
+0

こんにちはアンドリー、私は間違いなくそれを必要としません、私はちょうどそれを使用してそれを行うことができます見てみたいです。私は何を言うことができる、私は自分のために厄介なものを作るのが好きです:) – Keeron

関連する問題