java - 将 %s 替换为列表的随机变量

标签 java android json string random

你好,我目前正在编写一个小饮酒游戏。这里,来自 JSOn 文件的问题通过 Gson 转换为对象并指示问题。有些问题是专门针对在游戏开始时保存到游戏的玩家的。如果问题中有多个 %s 持弦者,则应该由不同的玩家进行比赛。 Json中的参数“Player Dance”,表示请求的玩家数量。

到目前为止,问题的概述是原样的,%s Stingholders 没有被玩家名字替换。不幸的是,根本不知道如何实现这样的事情。

Json 文件示例:

  {
    "Id": 135,
    "Frage": "%s spielt mit seinem linken und rechten Nachbarn Stein, Schere, Papier! Die verlierer trinken 3 Schlücke",
    "Spieleranz": 1,
    "Level": 2,
    "Mode": 2
  },
  {
    "Id": 136,
    "Frage": "%s nenne von jedem Mitspieler eine Schwäche oder eine negative Eigenschaft. Trinke nach jedem Feedback einen Schluck",
    "Spieleranz": 0,
    "Level": 2,
    "Mode": 2
  },
  {
    "Id": 137,
    "Frage": "%s du wählst: Wurdest du lieber alleine eine Nacht mit %s oder %s verbringen? Der gewählt verteilt 4 Schlücke",
    "Spieleranz": 3,
    "Level": 2,
    "Mode": 2
  },
  {
    "Id": 138,
    "Frage": "%s du wählst: Wer verträgt deiner Meinung nach am meisten alkohol? %s oder %s? Der NICHT gewählte trinkt 4 Schlücke",
    "Spieleranz": 3,
    "Level": 2,
    "Mode": 2
  }....

主要游戏类:

        int modi = 1;
        if (getIntent().hasExtra(getString(R.string.spielmodi))) {
            modi = getIntent().getIntExtra(getString(R.string.spielmodi), 1);
            System.out.println("modi = " + modi);
        }
        int grad = 1;
        if (getIntent().hasExtra(getString(R.string.betrunkenheitsgrad))) {
            grad = getIntent().getIntExtra(getString(R.string.betrunkenheitsgrad), 1);
            System.out.println("grad = " + grad);
        }


        Log.d("DF", "test");


        AssetManager assetManager = this.getAssets();
        List<Frage> data = null;
        InputStream json;
        try {
            json = assetManager.open("DichteFichte.json");
            BufferedReader br = new BufferedReader(new InputStreamReader(json, StandardCharsets.ISO_8859_1));
            String str = "";
            StringBuilder sb = new StringBuilder();
            while ((str = br.readLine()) != null) {
                sb.append(str);
            }
            br.close();
            Type list = new TypeToken<List<Frage>>() {
            }.getType();
            data = new Gson().fromJson(sb.toString(), list);
            System.out.println("data = " + data.toString());

        } catch (IOException e) {
            e.printStackTrace();
        }


        TextView Outout = findViewById(R.id.Output);
        Button Weiter = findViewById(R.id.weiter);
        Outout.setText("Keine Fragen mit diesen Parametern du Spast");

        //data.stream().unordered().limit(sternchenAnzahl);

        Random random = new Random();
        int finalModi = modi;
        System.out.println("finalModi = " + finalModi);
        int finalGrad = grad;
        System.out.println("finalGrad = " + finalGrad);
        if (data == null || data.isEmpty())
            return;

        List<Frage> finalData = data.stream()
                .filter(frage -> frage.getLevel() == finalGrad)
                .filter(frage -> frage.getMode() == finalModi)
                .collect(Collectors.toList());

        if (finalData.isEmpty())
            return;


        Weiter.setOnClickListener(v -> {
            Outout.setText(finalData.get(random.nextInt(finalData.size())).getFrage());
            clickcount=clickcount+1;
            if(clickcount%15==0){
                ShowPopupBetrunkenheitsgrad(v);
                betrunkenheitsgradup.show();
            }

        });
        Weiter.callOnClick();


    }

NameList 适配器类:

public class NamensListeAdapter extends RecyclerView.Adapter<NamensListeAdapter.NameViewHolder> {
    private List<Spieler> spielerList;
    private LayoutInflater inflater;



    public NamensListeAdapter(Context context, List<Spieler> namensList) {
        this.spielerList = namensList;
        this.inflater = LayoutInflater.from(context);
    }

    @Override
    public NameViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new NameViewHolder(inflater.inflate(R.layout.name_recyclerview, parent, false));

    }



    @Override
    public void onBindViewHolder(NameViewHolder holder, int position) {

        Spieler spieler = spielerList.get(position);

        String text = spieler.getName() + " (" + spieler.getGeschlecht().getCaption() + ")";

        holder.textView_name.setText(text);
    }


    @Override
    public int getItemCount() {
        return spielerList.size();

    }

    public void removeItem(int itemIndex) {
        spielerList.remove(itemIndex);
        notifyItemRemoved(itemIndex);
    }


    public class NameViewHolder extends RecyclerView.ViewHolder {
        TextView textView_name;

        public NameViewHolder(View itemView) {
            super(itemView);
            textView_name = itemView.findViewById(R.id.nameview_text);

        }


    }

}


```java
public class Spielereingabe extends Activity {
    private final List<Spieler> spielerList = new ArrayList<>();
    private Button button;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spielereingabe);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setActionBar(toolbar);
        final List<Spieler> spielerList = new ArrayList<>();


        //Button
        button = (Button) findViewById(R.id.zukategorieButton);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                openKategorien_n();

            }
        });


        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showDialog();
            }
        });

        RecyclerView recyclerView = findViewById(R.id.recycler_namensListe);

        final NamensListeAdapter namensListeAdapter = new NamensListeAdapter(this, spielerList);

        recyclerView.setLayoutManager(new LinearLayoutManager(Spielereingabe.this));

        recyclerView.setAdapter(namensListeAdapter);

        ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
            @Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
                return false;
            }

            @Override
            public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
                namensListeAdapter.removeItem(viewHolder.getAdapterPosition());

            }

            @Override
            public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
                // view the background view
            }
        };

        // attaching the touch helper to recycler view
        new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView);
    }


    //mathode für button
    public void openKategorien_n() {
        Intent intent = new Intent(this, Kategorien_n.class);
        startActivity(intent);

    }


    //pop-up Dialog
    private void showDialog() {
        View ppview = LayoutInflater.from(getApplicationContext()).inflate(R.layout.popup_enter_name, null);
        final EditText editText = ppview.findViewById(R.id.name_edit);
        final RadioGroup radioGroup = ppview.findViewById(R.id.name_radiogroup);



        final AlertDialog.Builder builder = new AlertDialog.Builder(Spielereingabe.this);
        builder.setView(ppview)
                .setTitle("Namen Eingeben")

                .setPositiveButton("Speicher", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        if (!editText.getText().toString().isEmpty())
                            spielerList.add(new Spieler()
                                    .setName(editText.getText().toString())
                                    .setGeschlecht(radioGroup.getCheckedRadioButtonId() == R.id.radio_male ? Gender.MALE : Gender.FEMALE));

                        Toast.makeText(Spielereingabe.this, editText.getText().toString() + " wurde hinzugefügt", Toast.LENGTH_SHORT).show();
                    }
                })
                .setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.cancel();
                    }
                })
                .show();


    }


}

抱歉有这么多代码,但我不知道从哪里开始,我更喜欢比太少的安吉根。如果有人能找到解决方案那就太好了

最佳答案

你的问题不清楚。假设您想从列表中选择一个随机变量(我猜String???),您可以使用以下内容:

List<String> list = ...  // initialized elsewhere
Random random = new Random();  // Random object allows creation of random number
int randomIndex = randon.nextInt(list.size());  // gets a random int in the range of acceptable indices
String randomString = list.get(randomIndex);

然后,您可以使用 String.format()String 中的 %s 替换为该值。

关于java - 将 %s 替换为列表的随机变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57491407/

相关文章:

android - Lollipop 应用程序的透明导航栏?

android - 如果显示软键盘,则“完整版面”将向上移动

json - GO - 从嵌套的 JSON 对象中获取属性值数组

java - JBehave 故事参数示例

java - Android Studio codestyles/Project.xml 配置

java - Kotlin - 无法创建两个具有不同列表类型参数的构造函数

android - 如何使用 Retrofit 发布 (x-www-form-urlencoded) Json 数据?

java - android 中的 USB 设置未存储

android - 如何解决 "gradle failed resolve com.theartofdev.edmodo:android-image-cropper:+"

java - 使用 JAVA 从 JSON 文件(嵌套对象数组)打印特定值