2017-10-21 12 views
1

私は2つのことを行うプログラムを作成しようとしていますが、ユーザー生成文字列の中で最も長い単語を見つけて、アルファベット順に私は最長の言葉がうまく働いていますが、私の人生を救うためにアルファベット順の問題を理解することはできません。私が実行している問題は、forループで実行されている単語を比較する方法です。どんな助けもありがとう!Javaで配列なしでアルファベット順にアルファベットを決定する

/* 
CSC 190 
Hw7 
Ryan Burchfield 
10/19/17 
Purpose: Take a string and return both the Longest and largest words in the String. 
*/ 
package hw7; 
import java.util.Scanner; 
class MyString{ 
    String s; 

    MyString(String s1){ 
     s=s1; 

    } 
    void setString(String s1){ 
     s=s1; 

    } 
    String getLongest(String s1){ 
     s1 = s1 +" "; 
     int length = s1.length(); 
     String temp="", longestw=""; 
     char ltr; 
     int templ, longest=0; 

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

      ltr = s1.charAt(i); 
      if(ltr!=' ' && ltr!=',' && ltr!='.'){ 
       temp=temp+ltr; 
      } 
      else{ 
       templ=temp.length(); 

       if(templ>longest){ 
        longest=templ; 
        longestw=temp; 
       } 
       temp=""; 
      } 
     } 
     return longestw; 
    } 
    String getLargest(String s1){ 
     s1= s1 + " "; 
     String temp="", curWord="",largestW=""; 
     char ltr; 
     for(int i=0; i<s1.length(); i++){ 
      ltr = s1.charAt(i); 
      if(ltr!=' ' && ltr!=',' && ltr!='.'){ 
       temp= temp + ltr; 

      }else{ 


       char ltr1;  
       for(int j=0; j<s1.length(); j++){ 
        ltr1 = s1.charAt(j); 
        if(ltr1!=' ' && ltr1!=',' && ltr1!='.'){ 
         curWord= curWord + ltr1; 
        } 
        else{ 

         int largest = temp.compareToIgnoreCase(curWord); 
         System.out.println(temp+","+curWord+","+temp.compareToIgnoreCase(curWord)); 
         System.out.println(largest); 
         if(largest > 0){ 

          largestW=curWord; 
         }else{ 
          largestW=temp; 
         } 
         curWord="";  
         temp=""; 
        } 
       } 
      } 
     } 
     return largestW; 
    } 

} 


public class Hw7 { 


    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     System.out.println("Please enter a series of words: "); 
     String s = in.nextLine(); 
     MyString s1 = new MyString(s); 
     System.out.println("The longest word is: " + s1.getLongest(s)); 
     System.out.println("The largest word is: " + s1.getLargest(s)); 
    } 

} 
+0

まず、あなたはアルファベット順で「最高」とはどういう意味ですか? 「りんご」と「ゼブラ」を考えると、「りんご」が最高か、「ゼブラ」ですか?それを無視して、最初の単語が "最高"であると仮定 - 後続の各単語と "最高"を比較する*** *** iff ***現在の単語が現在の "最高"更新 "最高"より "高い"それ以上の言葉はありません。現在の最高値を返します。これは、すべての単語と比較しているため** **最高でなければなりません。与えられたリンゴとゼブラ、 –

+0

、ゼブラが出力になります。 – Wigginton

答えて

0

if(largest > 0){ 
    largestW=curWord; 
}else{ 
    largestW=temp; 
} 

プログラムがうまくいかないところです。あなたは(largestWが空であるならば、ちょうどlargestW = tempを設定)getLargest()を書くためのより良い方法は、すなわち、1つのループを使用して、getLongest()と同じ方法を使用し、tempで毎回largestWを比較することであるlargestW

currWord/tempを比較しませんでした

+0

ありがとう、私はそれを撃つだろう。 – Wigginton

0

あなたの投稿には、一番長い言葉を得ることができます。一番長い手紙のアルファベット順に最高の手紙を得る方法をお伝えします。

  • このメソッドを使用して、指定された単語の文字配列を作成することができます。あなたが指定されたchar値

  • の整数値を取得するためにキャストを使用することができるよりも、あなたが最高の整数値のキャストを持っていたら

  • 次に、あなたは最高の整数値

  • を取得するために、その整数値を比較することができますそのint型の値は、より多くの情報へのリンクを以下の文字

を取るためにcharへ

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toCharArray()

http://javaseeeedu.blogspot.com/2015/12/casting-part-1.html

私はComparator<String>と入力しStringとり、単一の方法でこれを解決するだろう

import java.util.Scanner; 
class MyString{ 
    String s; 

    MyString(String s1){ 
     s=s1; 

    } 
    void setString(String s1){ 
     s=s1; 

    } 
    String getLongest(String s1){ 
     s1 = s1 +" "; 
     int length = s1.length(); 
     String temp="", longestw=""; 
     char ltr; 
     int templ, longest=0; 

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

      ltr = s1.charAt(i); 
      if(ltr!=' ' && ltr!=',' && ltr!='.'){ 
       temp=temp+ltr; 
      } 
      else{ 
       templ=temp.length(); 

       if(templ>longest){ 
        longest=templ; 
        longestw=temp; 
       } 
       temp=""; 
      } 
     } 
     return longestw; 
    } 
    char getLargest(String s1){ 

     int max = 0; 

     char []arr = s1.toCharArray(); 

     int temp[] = new int[arr.length]; 

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

      temp[i] = (int)arr[i]; 
      if(i!=0){ 

       if(temp[i-1] < temp[i]){ 
         max = temp[i]; 
       }else{ 

       max = temp[i-1]; 

       } 
      }     
     } 

     return (char)max; 
    } 

} 


class Demo { 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     System.out.println("Please enter a series of words: "); 
     String s = in.nextLine(); 
     MyString s1 = new MyString(s); 
     System.out.println("The longest word is: " + s1.getLongest(s)); 
     System.out.println("The largest letter is: " + s1.getLargest(s1.getLongest(s))); 
    } 
} 

enter image description here

+0

これは明らかに宿題で、あなたは何がうまくいかないのかを彼に伝えるのではなく、OPの宿題をしました... – Dabiuteef

+0

コメントをいただきありがとう私は投稿を編集しました。 –

0

それを試して、あなたのコードを変更しています。 Scanner(String)コンストラクタを使用してScannerを構築し、Scanner#useDelimiter(String)を使用して区切り文字を変更して、空白、コンマ、およびリテラル'.'を使用します。その後、付属のComparatorを使用してScannerで入手可能なトークンを比較してください。同様に、

static String findWord(Comparator<String> comp, String s1) { 
    Scanner sc = new Scanner(s1); 
    sc.useDelimiter("[\\s,\\.]+"); 
    String max = null; 
    while (sc.hasNext()) { 
     String token = sc.next(); 
     if (max == null || comp.compare(max, token) < 0) { 
      max = token; 
     } 
    } 
    return max; 
} 

その後、あなたはJavaの8+を使用していると仮定すると、mainのようなすでに利用可能Comparator Sを使って書くことができます -

Comparator<String> stringLengthComparator = Comparator.comparingInt(
     String::length); 
Comparator<String> stringAlphaComparator = Comparator.naturalOrder(); 
Scanner in = new Scanner(System.in); 
System.out.println("Please enter a series of words: "); 
String sentence = in.nextLine(); 
System.out.printf("Longest: %s%n", findWord(stringLengthComparator, sentence)); 
System.out.printf("Lexically: %s%n", findWord(stringAlphaComparator, sentence)); 

しかし、あなたは、以前のバージョンを使用している場合 - または

Comparator<String> stringLengthComparator = new Comparator<String>() { 
    public int compare(String a, String b) { 
     return Integer.compare(a.length(), b.length()); 
    } 
}; 
Comparator<String> stringAlphaComparator = new Comparator<String>() { 
    public int compare(String a, String b) { 
     return a.compareTo(b); 
    } 
}; 
0

THERのように - あなたは同等のコードを持つ2つのComparator Sを交換する場合は、正確に同じコードが動作することがないものをよりよく理解したいですeはそこにたくさんのコードがあり、ほとんどすべてが不必要です。

String longest = Arrays.stream(s.split(" +")).sort(comparing(String::length).reversed()).findFirst().get(); 
String highest = Arrays.stream(s.split(" +")).sort().reduce((a,b) -> b).get(); 

注:あなたの割り当てを提出する前によくコードを読み、理解し

はこれを試してみてください。

免責事項:コードがコンパイルあるいは動作し、それが自分の携帯電話上で使い込まれたように(それが動作する合理的な可能性があります)しないことがあり

+1

OPは配列を使用したくなかった: – notyou

関連する問題