Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串格式有3个条件:可能吗?_Java_String_Format_Output_Conditional Operator - Fatal编程技术网

Java 字符串格式有3个条件:可能吗?

Java 字符串格式有3个条件:可能吗?,java,string,format,output,conditional-operator,Java,String,Format,Output,Conditional Operator,我想格式化输出文本,使其与计数器值相对应。例如,我有3个计数器,当它为1、2和大于2时,我希望输出不同的单词 我尝试使用字符串格式,但它只适用于两个不同的计数器 这是我的密码: package vaja13; import java.util.Scanner; public class Vaja13 { public static void main(String[] args) { System.out.print("Vnesi besedilo: ");

我想格式化输出文本,使其与计数器值相对应。例如,我有3个计数器,当它为1、2和大于2时,我希望输出不同的单词

我尝试使用字符串格式,但它只适用于两个不同的计数器

这是我的密码:

package vaja13;
import java.util.Scanner;
public class Vaja13
{
    public static void main(String[] args)
    {
        System.out.print("Vnesi besedilo: ");
        Scanner sc = new Scanner(System.in);
        String besedilo = sc.nextLine();
        char [] tabela  = besedilo.toCharArray();
        int crke = 0,stevilke = 0,presledki  = 0;
        int i=0;
        while(i<tabela.length-1)
        {
           if (Character.isLetter(tabela[i]))
           {
            crke++;
            i++;
           }
            if (Character.isDigit(tabela[i]))
            {
                stevilke++;
                i++;
            }
            if (Character.isWhitespace(tabela[i]))
            {
                presledki++;
                i++;
            }
        }  
       System.out.println(String.format("V besedilu je %d %s ", crke,crke==2,crke >2 ? "crka":"crki":"crke"));
        }
    }
包vaja13;
导入java.util.Scanner;
公共类Vaja13
{
公共静态void main(字符串[]args)
{
系统输出打印(“Vnesi besedilo:”);
扫描仪sc=新的扫描仪(System.in);
字符串besedilo=sc.nextLine();
char[]tabela=besedilo.toCharArray();
int-crke=0,stevilke=0,presledki=0;
int i=0;
而(i2?“crka”:“crki”:“crke”);
}
}

在最后一行中,3个条件部分

crke==2,crke >2 ? "crka":"crki":"crke"
是无效的Java语法,您可以使用:

crke==2 ? "crka": crke > 2 ? "crki" :"crke"
不过,这有点难读。请注意,
?:操作员从右向左关联。

而不是

System.out.println(String.format(“V besedilu je%d%s”,crke,crke==2,crke>2?”crka:“crki:“crke”)

你必须做到:


System.out.println(String.format(“V besedilu je%d%s”,crke,(crke==2?”crka):(crke>2?:crki:“crke”))

您可以创建后缀的查找表,并在调用
Math.min
时使用它,如下所示:

private static String[] suffix = new String[] {"crka", "crki", "crke"};
...
for (int i = 0 ; i != 5 ; i++) {
    System.out.print(i+" ");
    System.out.println(String.format("V besedilu je %d %s ", i, suffix[Math.min(i, 2)]));
}
此解决方案的核心是表达式
Math.min(i,2)
,对于
i
的非负值,其计算如下:

  • 0
    i
    0
  • 1
    1
    为一时
  • 2
    i
    2
    或以上时
请注意,如果
i
为负值,上述代码将失败


谢谢您的意见。我设法用这种方法解决了我的问题

package vaja13;
import java.util.*;
class Vaja13 
{
    public static void main(String[] args) 
    {
        System.out.print("Vnesi besedilo: ");
        Scanner sc = new Scanner(System.in);
        String besedilo = sc.nextLine();
        char [] tabela  = besedilo.toCharArray();
        int crke = 0, stevke = 0, presledki = 0, i = 0;
        while(i<tabela.length)
        {
           if (Character.isLetter(tabela[i]))
           {
                crke++;
           }
           else if (Character.isDigit(tabela[i]))
            {
                stevke++;
            }
           else if (Character.isWhitespace(tabela[i]))
            {
                presledki++;
            }
           i++;
        }     


        Beseda besedaCrka = new Beseda
        (
                new String[]{"crk","crka","crki","crke"}
        );
        Beseda besedaStevka = new Beseda
        (
                new String []{"stevk","stevka","stevki","stevke"}
        );
        Beseda besedaPresledek = new Beseda 
        (
                new String [] {"presledkov","presledek","presledka","presledki"}
        );
        Beseda glagolBiti = new Beseda
        (
                new String [] {"je","je","sta","so"}
        );
        System.out.format("V besedilu %s %d %s, %d %s in %d %s.\n",
        glagolBiti.vrniObliko(crke),crke,besedaCrka.vrniObliko(crke),
        stevke,besedaStevka.vrniObliko(stevke),
        presledki,besedaPresledek.vrniObliko(presledki));

    }    
}
/**
 * Razred Beseda shranjuje slovnično obliko besede.
 */
class Beseda
{
    String oblikaBesede [];
    Beseda(String oblikaBesede[])
    {
        this.oblikaBesede = oblikaBesede;
    }
    String vrniObliko(int kolicina)
    {
      return  (kolicina < 1 || kolicina > 4? oblikaBesede[0] :
              (kolicina == 2 ? oblikaBesede[2] :
              (kolicina == 3 || kolicina == 4 ? oblikaBesede[3] :
              oblikaBesede[1])));
    }
}
包vaja13;
导入java.util.*;
Vaja13类
{
公共静态void main(字符串[]args)
{
系统输出打印(“Vnesi besedilo:”);
扫描仪sc=新的扫描仪(System.in);
字符串besedilo=sc.nextLine();
char[]tabela=besedilo.toCharArray();
int-crke=0,stevke=0,presledki=0,i=0;
而(i 4?oblikaBesede[0]:
(kolicina==2?oblikaBesede[2]:
(kolicina==3 | | kolicina==4?oblikaBesede[3]:
义务类[1]);
}
}

不要链接到代码;在问题中包含相关部分。请直接在问题中张贴您的代码。很少有人会去关注网站外的链接,在很多情况下,这些链接会停止工作,使这个问题在将来变得毫无用处。